Ochránění imputu

HackForum

Ochránění imputu#
Zdravím, jsem zase já s mojí hrou, a zase potřebuju poradit.

V jedné sekci mám několik imputů, a on mi do nich zadává toho: "0-999999" a tím pádem mu to odečte klidně i víc než má.

Mám tam pár věcí který by tomu měli zabránit (jedná se o prodej surovin ve hře, do pole zadáte číslo kolik chcete prodat, a nesmíte prodat víc než máte a nesmí tou ochranou prijít záporné číslo.). Chráním to tímto!

if($_POST['pocet'])
=='') echo "Udej počet zboží!";

elseif($_POST['pocet'] <= '0') echo "V&#154;echna čísla musí být kladná!";

elseif( $_POST['pocet'] > $prodej['jidlo'] ) echo "Nemů&#158;e&#154; prodat víc ne&#158; má&#154;!";

elseif( $_POST['pocet'] <='0') echo "Tak něco prodej vole!";

else{
$pole = explode("-",$_POST['pocet']);
$delkaPole = strlen($pole);
$vysledneCislo = "";
for($i=0;$i<$delkaPole;$i++)
{
if(is_numeric($pole[$i]))
{
$huh .= $pole[$i];
}
}


$penize_pridat=($huh * 1);

mysql_query('UPDATE `lg_4099`.`uzivatele` SET `penize` = `penize` +('.$penize_pridat.') WHERE id="'.$_SESSION['id'].'" ');

a stejnak když zadá váše zminěné číslo tak mu to odečte jakoukoliv hodnotu :(.

Jaký mám použít script aby se to nestávalo?

(odpovědět)
Pokyy | 85.207.18.*21.7.2008 11:12
re: Ochránění imputu#
Minule jsi to kontroloval podminkou 'is_numeric' myslim. Tak cely ten kod co jsi sem postnul zabal do te podminky 'if(is_numeric($_POST['pocet']))'
A nepouzivej promnennou '$_POST['pocet']' vsude,
nahraj si tu hodnotu do sve promenne: $pocet = $_POST['pocet'];
A tu teprve kontroluj, upravuj, zakazuj..
(odpovědět)
_Phuck3r | 88.146.45.*21.7.2008 13:53
re: Ochránění imputu#
Jj, is_numeric je dobry reseni, nebu tky intval... navic myslim, ze je zbytecny '0', staci 0 ne?(pretypovani)

taky je zajimavy
if(podminka) neco; elseif (stejna_podminka) ... :)

Btw s kopii promennych v pameti nesouhlasim (teda pro konrtolni ucely, pokud je treba s jejim obsahem dale pracovat, tak jo, aby nam zustal original)

... jo a vubec nechapu k cemu slouzi ta cast s explode :)...
(odpovědět)
Petrof_ | 212.90.248.*21.7.2008 14:27
re: Ochránění imputu#
S tou kopii co jsi rikal, zajimalo by me proc je lepsi? Pokud je to totiz lepsi, zajima me proc.
pls vysvetli
(odpovědět)
_Phuck3r | 90.176.226.*21.7.2008 17:47
re: Ochránění imputu#
imo je to neelegantni (neefektivni)... proc mit v pameti 2 stejne promenne? Zabere to 2x tolik mista. Navic to sezere i nejakej ten mikrocas :)... predstav si, ze mas 5 vstupu, ktere chces kontrolovat... to budes delat
$vstup1 = $_POST["vstup1"];
$vstup2 = $_POST["vstup2"];
...
if($vstup1 && $vstup2 && ... vstupn) ... ?

Neni jednodussi napsat if($_POST["vstup1"] && ...$_POST["vstupn"]) ?

Samozrejme, ze si muzes neco jako: foreach($_POST as $jmeno => $hodnota) $$jmeno = $hodnota;, ale je to zbytecne pomaly.

Nemluve o tom, ze kdyz potom bude chtit nekdo skript predelavat, tak nepozna, jestli je to hodnota od uzivatele, nebo jestli se jedna o nejakou pomocnou promennou (jasne, muzes zas oznacovat $inp_promenna, ale zas dalsi prace navic).
... tak to vidim ja :P
(odpovědět)
Petrof_ | 212.90.248.*21.7.2008 19:14
re: Ochránění imputu#
Ok, rad se poucim..
(odpovědět)
_Phuck3r | 88.146.45.*22.7.2008 12:40
re: Ochránění imputu#
A ono ne :). Pokud vytvoris promennou je to lepsi at uz z bezpecnostnich duvodu, tak i z duvodu optimalizace.

1) Bezpecnost. Muze se stat cokoliv a promenna v POST se ti muze zmenit.
Za dalsi pokud se nemylim, tak do promenne post nemuzes zapisovat, tim padem, mas vesmes nulovou moznost s tim pozadavkem pracovat.

2) Efektivita. Takze pokud vytvoris promenou a dosadis tam hodnotu post, tak pri ziskavani teto hodnoty, se spotrebuje mene casu, mene manipulace s pameti nez pri pouzivani POST[...].. Proc? Jelikoz post je typ slovniku a tim padem pri alokaci zabere vic mista nez promenna a zaroven nasledna manipulace (bavime se o nano sekundach bo mozna este min) trva o neco dele nez jenom prectenim hodnoty v pameti. Spracovani slovniku je o neco slozitejsi nez promenna ;).
(odpovědět)
babca | 194.212.59.*22.7.2008 13:08
re: Ochránění imputu#
Samozrejme, pokud chces s pozadavkem dale pracovat (upravovat atd), tak je lepsi kopie. Jinak do $_POST tusim zapisovat jde (ne ze bych to nejedboze delal :). Je jasny, ze manipulace se slovnikem je casove narocnejsi, nez jednoducha prace s promennou. Myslel jsem to z hlediska jednoduche kontroly...

tzn opravdu jen pripady, kdy treba kontrolujes

if($_POST["dodrzimpravidla"]) je vyhodnejsi nez $pravidla = $_POST["dodrzimpravidla"];
if($pravidla)... nekomu to mozna prijde jasny, ale vidim to hodne casto... ovsem, co by me docela zajimalo, jestli je vyhodnejsi konkretne

$xx = $_POST["xx"];
if(validate($xx)) fce($xx);

nebo

if(validate($_POST["xx"])) fce($_POST["xx"]);
... osobne se teda lip vyznam v druhem pripade, je to o 1 radek min (nadruhou stranu, koho to zanedbatelny casovy zpozdeni zajima)... a kdybys takhle kontroloval 5 parametru, tak uz mas 5 radku navic

... rekl bych, ze v takovejchle jednoduchejch pripadu to zavisi hlavne na zvyku
(odpovědět)
Petrof_ | 212.90.248.*22.7.2008 13:52
re: Ochránění imputu#
koukam, ze ani jeden jste toho v php moc nenapsal. o tom, ze byste meli poneti o kompilaci a behu php ani nemluvim :)

(odpovědět)
prc | 213.211.51.*23.7.2008 17:49
re: Ochránění imputu#
ja v php nedelam a ani se o nej nezajimam, ale z hlediska logickeho uvazovani, vzdy ti bude trvat prace se slovnikem dyl, nez s promenou ci polem, to je pravda, ne? A je jedno jak ten interpretr pracuje, vzdy to tak bude. Teda pokud si to myslim spravne... Vzdy ti bude trvat min casu hledani, kdyz ti reknu presne cislo stranky v knizce, nez kdyz ti reknu nazev kapitoly a ty si to musis v obsahu najit.

Ale samozrejme je mozne ze se mylim, v php nedelam, ale zdravy rozum mi napovida toto.
Ikdyz je pravda, ze kompilator v tom muze udalat taky svoje.
(odpovědět)
babca | 194.212.59.*23.7.2008 19:18
re: Ochránění imputu#
to je samozrejme pravda, i kdyz rozdil neni az tak velky (fetch jednoduche promenne stejne jako prvku jednorozmerneho pole je v php bytecodu jeden opcode. hashovane klice poli. slusny reuse alokator.) a rozhodne je zanedbatelny v prostredi, pro ktere je php urceno.

ale o to nejde, hlavni duvod je ten, ze jednodussi identifikator se lepe pise :)

(odpovědět)
prc | 213.211.51.*24.7.2008 18:54
re: Ochránění imputu#
jj se vsim souhlasim. Me slo jenom o to vyvratit mu to tvzeni, ze se se slovnikovou strukturou da usetrit vice O(...). :).. Jinak samozrejme se se slovniky dela o dost znacne rychleji v uzivatelskem modu :). A nehlede, jak pravis, stejne se vyhledava podle hashovaneho klice :)... Tam slo o to ujasnit si co je rychlejsi :) (o ten bezvyznamny cas) :)

Aspon ze jsem se nemylil :)

Dekuji :)
(odpovědět)
babca | 194.212.59.*24.7.2008 23:56
re: Ochránění imputu#
to je kod na bliti. proc is proste neprectes dokumentaci misto vymysleni kravin?

$pocet = intval($_POST['pocet']);
if ($pocet <= 0) error;
elseif ($pocet > $prodej['jidlo']) error;
else update;


(odpovědět)
prc | 213.211.51.*23.7.2008 17:29
re: Ochránění imputu#
O jakou hru se jedná? jestli to smím vědět.
(odpovědět)
ShaiMagal.Org | E-mail | Website | ICQ 34130017324.7.2008 20:41

Zpět
 
 
 

 
BBCode