Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
jnt
HV Guru

liitunud: 10.05.2005

|
27.03.2009 19:03:36
Maksimaalne turvalisus PHP+MySQL |
|
|
Tervitused! Nimelt, seoses ühe suurema projektiga olen valmis kribanud ka enda andmebaasiklassi, millega siis päringuid andmebaasi teen. Kõik toimib ja paistab ideaalne, kuid kas see nii on? Nimelt huvitaks kõikvõimalikud variandid ja võimalused, kuidas teha üks päring turvaliseks, kui päringusse on ka juurde toodud erinevad $_POST, $_GET jt muutujad. Hetkel on turvalisus sinna kanti:
Mul on oma andmebaasi objekt $m. Päringu tekitan meetodiga $m->q();
Võtame alguses "koleda" ebaturvalise koodi:
$q=mysql_query("SELECT username FROM table WHERE id=".$_GET['id']); |
Sellise päringu saan ma oma klassiga teha aga nii:
$q=$m->q("SELECT username FROM table WHERE id=[0:i]", $_GET['id']); |
Mis tehakse antud juhul, on siis see, et võetakse [0] asemele $_GET['id'], mis lastakse läbi mysql_real_escape_string() funktsiooni. Ja kuna sellel [0]'il on mul lisaparameeter "i", siis on tollest väärtusest veel võetud intval(). Lisaparameeter on ka float'i jaoks, kus tehakse sama asja floatval() funktsiooniga. Lisaparameeter pole kohustuslik ja seetõttu string'i puhul seda sättima ei pea.
Kuid küsimus oleks, kas tegemist on ikka turvalise asjaga? Ega siin ei teki ikka mingeid jamasid ja ohte? Oskate ehk sel alal mingil määral nõu anda?
Tänades,
Joonatan.
_________________ Progemisest: https://byteaether.github.io/
Seisab keldris vana 386-486-Pentium1? Räägime! Ehk saan vanakesele uue elu anda.
Vaata siia, äkki müün midagi põnevat -> https://www.osta.ee/index.php?fuseaction=listing.seller&q[seller]=jnt |
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
airm
HV Guru
liitunud: 26.02.2003
|
27.03.2009 19:56:53
|
|
|
turvalisus turvalisuseks,
aga mis juhtub, kui get->id asemel on string, mitte number?
errorkontroll stringide ja numbrite üle toimub ennem või pärast info edastamist sinna hüpersuper objekti?
või objekti sees?
|
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
1 :: |
50 |
|
tagasi üles |
|
 |
jnt
HV Guru

liitunud: 10.05.2005

|
27.03.2009 20:06:49
|
|
|
kui $_GET['id'] on string, siis tulemuseks on see, mille annab mysql_real_escape_string(intval($_GET)). See kontroll toimub juba q() meetodi sees, kui asendatakse [blabla] stuffi. (lisaks veel omasätitud kraam ka juures, nagu [pre] prefixi jaoks jne)
see, kas nt $_GET['id'] väärtust omab, toimub muidugi väljaspool klassi vastava if'iga, peale mida hakatakse edasi vaatama.
_________________ Progemisest: https://byteaether.github.io/
Seisab keldris vana 386-486-Pentium1? Räägime! Ehk saan vanakesele uue elu anda.
Vaata siia, äkki müün midagi põnevat -> https://www.osta.ee/index.php?fuseaction=listing.seller&q[seller]=jnt |
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
27.03.2009 20:09:07
|
|
|
Seega piirad sa $m->q() ära ainult int väärtustega selekteerimiseks ?
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
jnt
HV Guru

liitunud: 10.05.2005

|
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
k2iguvahetaja
HV veteran
liitunud: 07.05.2003
|
27.03.2009 20:15:14
|
|
|
utf doctrine
|
|
Kommentaarid: 45 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
38 |
|
tagasi üles |
|
 |
jnt
HV Guru

liitunud: 10.05.2005

|
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
28.03.2009 01:45:23
|
|
|
Noh kui loogikavigasid sul seal mysql klassis ei ole, siis põhimõtteliselt peaks kõik hästi töötama, kuna kõik parameetrid escapetakse ära ja alles siis pannakse sql lausesse sisse. Ehk näitad koodi ka ?
Aga üks küss ikkagi on veel: mis juhtub siis, kui su kood jookseb kusagil serveris kus on magic quotes peal ? Kas stringid muutuvad \\\\\\\\ sasipundardeks ?
Soovitaks mingi üldisema lisafunktsiooni teha millega võtad get/post parameetreid, vajadusel teed stripslashes kui magic quotes on peal ja siis otsa teed veel intval/floatval kui tegu numbriga.
Sellisel juhul sa saad ka mujal kui ainult sql klassi parameetrina sama väärtust kasutada ja on samamoodi turvaline/ühtne ka mujal koodis.
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
jnt
HV Guru

liitunud: 10.05.2005

|
28.03.2009 13:19:07
|
|
|
inzinz, magic quotes? Kohe lähen ja uurin selle kohta. Hetkel muidu asi paistab kenasti toimivat küll... Tuli jah lisaks idee teha klassiväline funktsioon, millega saab "valideerida" stringe. Et saab kontrollida, kas pikkus on vastav, kas tegemist on nr, stringi või e-mailiga jne.
Aga selle magic quotes'iga, et kui see peal, tuleb stripslashes kõigepealt siis ära teha, jah?
Siin siis query funktsioon, mis on privaatne. Sellele teevad päringuid funktsioonid q (tavaline query), qfa (esimene tulemus mysql_fetch_array'ga läbi), qfa2d (eelmine, kuid kõik tulemused, kokku 2d array), qfo (nagu qfa, aga mysql_fetch_object funktsiooniga) ja qfoa (nagu qfa2d, ainult et array siis nö objektidest). See query sööb argumente juba array'na, kus esimene liige on query ise.
private function query($args){
//Esialgne query
$q=$args[0];
if($q==''){ return $this->lastq; }
//Funktsiooniga antud argumendid
if(count($args)>1){
for($i=1;$i<count($args);$i++){
$q=str_replace("[".($i-1)."]", mysql_real_escape_string(trim($args[$i]), $this->link), $q);
$q=str_replace("[".($i-1).":i]", mysql_real_escape_string(intval(trim($args[$i])), $this->link), $q);
$q=str_replace("[".($i-1).":f]", mysql_real_escape_string(floatval(trim($args[$i])), $this->link), $q);
}
}
//Sätitud asendused
foreach($this->reps as $key => $value){
$q=str_replace("[".$key."]", mysql_real_escape_string(trim($value), $this->link), $q);
}
//Alustame timeriga
$timerstart=$this->getmicrotime(); //Alustame timeriga
//Query ise
$this->lastq=mysql_query($q, $this->link);
if(!$this->lastq){
$this->log($q, true);
return false;
}
//Lõpetame timeriga
$this->lastqtime=$this->getmicrotime()-$timerstart; //Kribame kulunud aja muutujasse
$this->totalqtime+=$this->lastqtime;
$this->qcount++; //Query loendur
$this->log($q);
return $this->lastq;
} |
_________________ Progemisest: https://byteaether.github.io/
Seisab keldris vana 386-486-Pentium1? Räägime! Ehk saan vanakesele uue elu anda.
Vaata siia, äkki müün midagi põnevat -> https://www.osta.ee/index.php?fuseaction=listing.seller&q[seller]=jnt |
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
29.03.2009 01:09:59
|
|
|
Natuke uurides tekkis paar küsimust:
esiteks miks sa teed stringidele trim funktsioonis, mis peaks andmeid baasi edastama. Nii tekivad ju olukorrad kus mingil juhul läheb infot kaduma, ilma etteteatamiseta. Trim tuleks ideeliselt teha ikka seal kohas kus infot ette annad, kui tead et kindlalt tahad trim teha mingile parameetrile.
teiseks, mis saab siis, kui tekstivälja/stringiparameetri väärtuses on kasutaja sisendist tulnud [mingiparam] või [2] jne. Praegusel juhul tekib data integrity probleem, kuna stringis teed järjest replacemisi. Kui kasutaja kogemata/meelega paneb teksti välja sisse stringi [1] siis tekib tema teksti sisse [1] asemele mingi väärtus. Üks lähenemine oleks sql järjest märkhaaval/parameeterhaaval läbi käia ja siis uus string koos väärtustega kokku ehitada. Säiliks andmete ühtsus ning töötaks endiselt turvaliselt.
kolmandaks, kas stringidele hakkad ise alati etteantavas päringus quotesid ümber panema stiilis: q('select * from tabel where nimi="[0]"', 'nimi'). Kui sul asendav loogika juba teab et tegu stringiga, siis oleks kergem sealsamas asendamise loogikas kohe "" ümber lisada ja mujal koodis keerukust kokku hoida pluss ei saa tekkida unustamisest tulenevaid vigasid.
minu 5 senti
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
jnt
HV Guru

liitunud: 10.05.2005

|
29.03.2009 13:27:35
|
|
|
inzinz, Suured tänud, eile õhta tulin ka järsku idee peale, et mis siis saab, kui järsku keegi [0] nt ise sisestab... Lahendaksin ma hea meelega seda asja 2x explode'imise teel (algul [ järgi ja siis : järgi. siis saan kätte nr ja tüübi saan : explode'i teise elemendi esimesest tähest), kuid siis oleks jama ikkagi olemas. Üks võimalus oleks kasutajal [ ja ] märk ära keelata, mis polegi liiga halb variant, kuid kuidas sa täpselt seda tähthaaval läbi käimist ette kujutad, et kasutaja stuffi ei hakataks "parsima"?
Hetkel olen natuke tegelenud üldise turvalisusega ka. olen teinud funktsiooni, millega saab kontrollida, kas sisestatu on str, int, aadress või e-mail ja juures veel min ja max pikkus. Veel olen teinud token'ite süsteemi, kus funktsiooni käivitades genereeritakse suvaline string-jada ja tagastatakse see ning pannakse too ka sessiooni. Kui kontrollida, kontrollid $_POST['token']/$_GET['token']'it selle sama funktsiooniga, andes argumendiks true, mis läbi tagastab funktsioon token'i sessioonist, kuid kustutab sessioonist tokeni ära. (Iga kord, kui ilma argumendita token'i funktsioon käivitatakse, vaadatakse, kas token on juba genereeritud ja kui pole, siis see genereeritakse ning lõpuks tagastatakse viimane) Lisaks veel olen kokku klopsinud kerge captcha. Et sellised lood veel turvalisuse teema pealt.
Kuid tulles tagasi mysql päringute juurde, siis jah, olekski küsimus, et kuidas sa käiksid selle sql päringu tähthaaval läbi? Kas tõesti mingi keemiaga for tsükliga (näiteks) käia $q{0} - $q{length} läbi ja siis seal tegeleda? Kui kiire selline lahendus oleks?
EDIT: Kas mõtlesid midagi sellist muidu, et "ehitada" uude muutujasse täht haaval uut query't ja niimoodi siis asi ära teha? Kas umbes nii?
for($a=0;$a<strlen($q);$a++){
if($q{$a}!='['){
$pq.=$q{$a};
}else{
if($p{$a+2}!=':'){
$pq.=mysql_real_escape_string(trim($args[$p{$a+1}+1]));
$a+=3;
}else{
switch($p{$a+2}){
case 'i': $pq.=mysql_real_escape_string(intval(trim($args[$p{$a+1}+1]))); break;
case 'f': $pq.=mysql_real_escape_string(flotaval(trim($args[$p{$a+1}+1]))); break;
}
$a+=5;
}
}
} |
(Pole koodi ennast veel proovinud, kuid loodan, et vigu selles hetkel pole.)
_________________ Progemisest: https://byteaether.github.io/
Seisab keldris vana 386-486-Pentium1? Räägime! Ehk saan vanakesele uue elu anda.
Vaata siia, äkki müün midagi põnevat -> https://www.osta.ee/index.php?fuseaction=listing.seller&q[seller]=jnt |
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
29.03.2009 14:43:41
|
|
|
Umbes midagi sellist jah aga sul see kood seal hetkel töötab ainult ühekohaliste numbritega [1], [2:f] jne, kui aga tuleb sisse [12:f] siis loogika enam ei tööta.
Üks variant oleks jah explodeda stiilis:
$arr = explode('[', $q);
$q2 = '';
foreach($arr as $qpart) {
$subarr = explode(']', $qpart, 2);
if(count($subarr) == 2) {
$parts = explode(':', $subarr[0]);
$value='';
if(intval($parts[0]).'' === $parts[0]) {//kontroll kas on numbriline väärtus
$value = $args[$parts[0]];
} else {
$value = $this->reps[$parts[0]];
}
if(!isset($parts[1])) $parts[1] = '';
switch($parts[1]) {
case 'i': $value = intval($value); break;
case 'f': $value = floatval($value); break;
default: $value = '"'.mysql_real_escape_string($value).'"';
}
$q2 .= $value.$subarr[1];
} else $q2 .= $subarr[0];
}
mysql_query($q2);
|
teine vairant oleks miskit sellist:
$q2 = '';
$part = '';
$inpart = false;
for($i = 0; $i < strlen($q); $i++) {
if(!$inpart && $q[$i] == '[') {
$part = '';
$inpart = true;
continue;
}
if(!$inpart) $q2 .= $q[$i];
else {
if($q[$i] == ']') {
$inpart = false;
$parts = explode(':', $part);
$value='';
if(intval($parts[0]).'' === $parts[0]) {//kontroll kas on numbriline väärtus
$value = $args[$parts[0]];
} else {
$value = $this->reps[$parts[0]];
}
if(!isset($parts[1])) $parts[1] = '';
switch($parts[1]) {
case 'i': $value = intval($value); break;
case 'f': $value = floatval($value); break;
default: $value = '"'.mysql_real_escape_string($value).'"';
}
$q2 .= $value;
} else $part .= $q[$i];
}
}
|
Kus siis jupphaaval käib stringi läbi ja [] puhul teeb lisaloogikat väärtuse leidmiseks.
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
jnt
HV Guru

liitunud: 10.05.2005

|
29.03.2009 15:24:25
|
|
|
Hetkel leiutasin ise ka seda enda esialgset koodi, et toetaks mitmekohalisi numbreid ja välja tuli selline süsteem:
$q="SELECT * FROM [0] WHERE [1:s]=[10:s][13:s]";
$args[]='';
$args[]='tere1';
$args[]='tere2';
$args[]='tere3';
$args[]='tere4';
$args[]='tere5';
$args[]='tere6';
$args[]='tere7';
$args[]='tere8';
$args[]='tere9';
$args[]='tere10';
$args[]='tere11';
$args[]='tere12';
$args[]='tere13';
$args[]='tere14[3]';
for($a=0;$a<strlen($q);$a++){
if($q{$a}!='['){
$pq.=$q{$a};
}else{
$nrlength=1;
$nr='';
while($q{$a+$nrlength}!=':' && $q{$a+$nrlength}!=']'){
$nr.=$q{$a+$nrlength};
$nrlength+=1;
}
if($q{$a+$nrlength}!=':'){
$pq.=trim($args[$nr+1]);
$a+=$nrlength;
}else{
switch($q{$a+$nrlength+1}){
case 'i': $pq.=intval(trim($args[$nr+1])); break;
case 'f': $pq.=floatval(trim($args[$nr+1])); break;
case 's': $pq.="'".trim($args[$nr+1])."'"; break;
}
$a+=$nrlength+2;
}
}
}
echo $pq; |
Paistab toimivat hetkel ka selline variant. See kood hetkel siis "niisama" stiilis, mille hiljem mugandan db klassi. Igastahes paistab toimivat ja peale asendusi neid asendusi üle ei "parsita".
_________________ Progemisest: https://byteaether.github.io/
Seisab keldris vana 386-486-Pentium1? Räägime! Ehk saan vanakesele uue elu anda.
Vaata siia, äkki müün midagi põnevat -> https://www.osta.ee/index.php?fuseaction=listing.seller&q[seller]=jnt |
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
29.03.2009 15:30:43
|
|
|
Aga ühe asja kaotasid sa ära, mysql_real_escape_string'i sa enam ei tee miskipärast.
Rida
case 's': $pq.="'".trim($args[$nr+1])."'"; break;
vajaks ikkagi escapemist ka
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
jnt
HV Guru

liitunud: 10.05.2005

|
|
Kommentaarid: 110 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
0 :: |
102 |
|
tagasi üles |
|
 |
nene
Kreisi kasutaja

liitunud: 20.03.2004
|
31.03.2009 23:00:13
|
|
|
Mainin, et sedasorti kood on just selline, mille arendamisel tuleks vägagi kasuks unit-testide kasutamine. Eriti veel siis kui su eesmärgiks on turvaline kood.
Sul on üsna rangelt piiritletud probleem. Funktsiooni sisend ja väljund on lihtne, kuid sisemine loogika on keerukas. Mis on unit-testimiseks ideaalne.
_________________ Mõistus otsas? Pane pinusse... |
|
Kommentaarid: 24 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
23 |
|
tagasi üles |
|
 |
kapa24
HV vaatleja
liitunud: 23.01.2003
|
01.04.2009 10:26:30
|
|
|
Minu panus, preg_replace_callback funktsiooni kasutades...
class DataB {
public function replace($matches) {
switch ($matches[2]) {
case 'i':
$value = (int)$this->params[$matches[1]];
break;
case 'f':
$value = (float)$this->params[$matches[1]];
break;
case 's':
default:
$value = "'" . mysql_real_escape_string($this->params[$matches[1]]) . "'";
break;
}
return $value;
}
public function q() {
$args = func_get_args();
$query = array_shift($args);
if (is_array($args[0])) {
$params = $args[0];
} else {
$params = $args;
}
$this->params = $params;
$result = preg_replace_callback('[\[([0-9A-Za-z_]{1,30}):([isf])\]]', array($this, 'replace'), $query);
return $result;
}
};
$db = new DataB();
$params = array(
'mate_id' => 10,
'name' => 'john'
);
echo $db->q("SELECT * FROM users WHERE mate_id = [mate_id:i] AND username = [name:s] OR username = [name:s]", $params);
?>
|
|
|
tagasi üles |
|
 |
d3t
HV Guru

liitunud: 14.05.2004
|
01.04.2009 10:36:27
|
|
|
Esiteks peaks sinna klassi saama pöörduda ainult sinu programmi siseselt, seega hea oleks kui sa nt lipuga ära määraks klassi suremise kui sinna otse pöördutakse.
Teiseks võiksid valideerida sisendi enne protsessi ja kurjad comandid nagu table drop jne välja filtreerida
_________________ next.Insiders - koht mängijatele ja tehnikahuvilistele toredaks ajaveetmiseks.
PT: Sony XE90 & LG C1 värvi kalibreerimine |
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
72 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
01.04.2009 11:32:43
|
|
|
tsitaat: |
Esiteks peaks sinna klassi saama pöörduda ainult sinu programmi siseselt, seega hea oleks kui sa nt lipuga ära määraks klassi suremise kui sinna otse pöördutakse. |
Ehk selgitad lähemalt kuidas sinu teooria järgi annab php klassi poole pöörduda programmi väliselt ? 
Ja kui teha selline korralik parameetritega teema (nagu praegu tehtud on), et mingil juhul isegi kogemata ei saa stringi drop table sql käsuna jooksutada, siis pole mingit filtreerimist ja valideerimist nii madalal astmel vaja, kuna kõik stringi parameetrid escapetakse korrektselt ja pannakse jutumärkide sisse.
Staatiline filtreerimine, replacemine ja errorite andmine on paras jama üldiselt, eriti andmebaasiklassi puhul mida sa saad ise teha. Kõige ehtsama näite kehva replace jms kohta saad kui otsid googlest väljendit clbuttic (classic stringis replacetakse agaralt väljend ass sõnaga butt). Pealegi selleks et otsida ülesse kõikvõimalikud päringud mis võivad midagi halvasti teha on suht lõputu ülesanne võrreldes paarirealise korrektse escapemisega, millega välistad 100% kõik sql injection jamad...
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
d3t
HV Guru

liitunud: 14.05.2004
|
01.04.2009 12:32:22
|
|
|
inzinz, kui nt includida seda faili kus klass sees on, siis annab seda ju kasutada?
Pahad requestide filterdamisest, mõtlesin midagi sellist: http://firewallscript.com/
_________________ next.Insiders - koht mängijatele ja tehnikahuvilistele toredaks ajaveetmiseks.
PT: Sony XE90 & LG C1 värvi kalibreerimine |
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
72 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
01.04.2009 15:01:50
|
|
|
No aga see ei anna suurt midagi juurde turvalisusele kas lasta includeda või mitte, kuna baasi klass on niikuinii eraldi failis klassina, sisse includides mingit kriitilist loogikat ei tohiks jooksutada ning baasi connectimise info peaks ka kuskil eraldi olema.
Niisama klassi sisaldava faili sisse includemine ei kvalifitseeru küll kuidagi häkkimisena
PHPBB foorumi puhul on küll oluline kas lubada includeda ja aadressiribalt ligi saada, kuna failid on funktsioone ja tavakoodi täis, mida igal includemisel jooksutatakse ja võib igast huvitavaid olukordasid tekitada.
Nonde blokkijate/filtrijate koha pealt ütleks et väga tihti need keeravad käru. Põhiprobleemiks see, et too vaheskript/filtreerija ei tea halligi sellest mida sinu php kood teeb kui saab näiteks ette väärtuse admin"#
Kui sinu kood sisestab selle ilusti tabelisse või kasutab päringus normaalselt (escapeb ära) on kõik korras sinu poolt tegelikult, kui aga filtreerija eeldab et selle peale vaja alati errorit visata või ei tea mida veel teha (asendada) siis tekivad andmekaod ja muidu segadust.
Seepärast ongi soovituslik kasutada miskit sellise parameetritega sql asjandust algusest peale, mis teeb by default kõik päringud turvaliseks ja kogu moos, ei mingit häkkimist ja ei mingeid imelikke olukordasid kus mingi kolmas kooditükk andmeid näperdab vahepealt ära.
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
andresv
HV kasutaja
liitunud: 06.12.2004
|
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
5 |
|
tagasi üles |
|
 |
d3t
HV Guru

liitunud: 14.05.2004
|
01.04.2009 15:21:54
|
|
|
inzinz, mina nt kipun kirjutama extends class config ja enne seda faili algusesse include config ala ja minu puhul oleks nt turvaauk kui saaks otse includida
_________________ next.Insiders - koht mängijatele ja tehnikahuvilistele toredaks ajaveetmiseks.
PT: Sony XE90 & LG C1 värvi kalibreerimine |
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
72 |
|
tagasi üles |
|
 |
nene
Kreisi kasutaja

liitunud: 20.03.2004
|
02.04.2009 21:39:42
|
|
|
Ma pean ütlema, et see MySQLi parameetrite bindimise värk on üks haigemaid API-sid mis ma näinud olen. Kõigepealt bindid mingid muutujad, ning hiljem nende muutujate väärtusi muutes muutuvad maagiliselt ka päringu parameetrite väärtused.
Kunagi proovisin seda asja kasutada kui kirjutasin endale üht andmebaasi klassi, kuid pärast pikka pusimist ja kirumist viskasin asja nurka ning kirjutasin ise mehhanismi SQL-i parameetrite asendamiseks.
Ei soovitaks seda asja kellelegi.
_________________ Mõistus otsas? Pane pinusse... |
|
Kommentaarid: 24 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
23 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
03.04.2009 01:15:49
|
|
|
Peamine probleem nende keerukamate komponentidega, mis on süsteemi sisse ehitatud, ongi see, et nad käituvad mitte nii nagu sina tahad vaid nii nagu nende tegijad arvasid et oleks hea. Näiteks PHP enda DateTime klass oli veel mingi aeg suht jama, ning kuna ise seda muuta/overrideda ei saa, siis pidin tegema DateTimeBase klassi omale mis võimaldaks teha just täpselt niimoodi asju nagu vaja.
Ja lisaks kui antud komponendil on mingi bugi (mysqli extension näiteks, kus on neid bugisid aja jooksul ikka jagunud) siis pead ootama uut php versiooni või hakkama ise patchima ja kokku kompileerima.
mysql_query jms tavalised põhilised asjad on kindla peale töötavad ja nende peale oma klassi ülesse ehitades on esiteks hea näpuharjutus turvalise koodi kirjutamise jaoks ja teiseks kui tekib bugisid, saad alati ise kiirelt ära parandada ilma kolmandate osapoolte taga ootamata.
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
|