Topic: Kaip apsisiaugoti nuo SQL injection
žinau, kad tai labai pavojinga ir nekartą esu nukentėjęs per šią spragą.
Kaip teisingai reikia parengti php kodą, kad duomenų įterpimas į mysql duombazę ar kitos funkcijos būtų saugios
išanksto dėkoju
PHP ir MySQL programavimas, SQL užklausos, duomenų bazės, PHP scriptai, pagalba, diskusijos, pamokos ir straipsniai.
You are not logged in. Please login or register.
PHP ir MySQL → PHP → Kaip apsisiaugoti nuo SQL injection
žinau, kad tai labai pavojinga ir nekartą esu nukentėjęs per šią spragą.
Kaip teisingai reikia parengti php kodą, kad duomenų įterpimas į mysql duombazę ar kitos funkcijos būtų saugios
išanksto dėkoju
na tai ar kasnors žinot?
hm, gyvų čia nedaug :D
šiaip, kiek mano žinios traukia, tai pagrindinis dalykas - escapinti visus kritiškus simbolius. Tik jokiu būdu ne su kokiu addslashes(), o su mysql_real_escape_string
Injection jau turėtum kaip ir negauti, dar aišku gali būti visokie buferio perpildymai, bet kaip su juo dorotis..hm, nu retas hackeris pabandys tuo užsiimti, bet turbūt reiktų tikrinti kokio dydžio info yra perduodama. Kas čia dar.. nu, lyg ir viskas. čiuju nieko naujo nepasakiau :/
Tiesa, prieš escapinant reikia pasižiūri ar neįjungta "magic_quotes", nes gali išeiti dvigubas escapinimas. Bet viskas yra funkcijos manuale ;)
Dėkui - didelsi ačiū
define("QUOTES_GPC", (ini_get('magic_quotes_gpc') ? TRUE : FALSE));
function stripinput($text) {
if (QUOTES_GPC) $text = stripslashes($text);
$search = array("\"", "'", "\\", '\"', "\'", "<", ">", " ");
$replace = array(""", "'", "\", """, "'", "<", ">", " ");
$text = str_replace($search, $replace, $text);
return $text;
}
kažin kaip šitas?
Dėkui - didelsi ačiū
define("QUOTES_GPC", (ini_get('magic_quotes_gpc') ? TRUE : FALSE)); function stripinput($text) { if (QUOTES_GPC) $text = stripslashes($text); $search = array("\"", "'", "\\", '\"', "\'", "<", ">", " "); $replace = array(""", "'", "\", """, "'", "<", ">", " "); $text = str_replace($search, $replace, $text); return $text; }
kažin kaip šitas?
Hm, čia escapinamas html kodas, ne mysql dalis. Nuo to saugotis irgi reikia, bet čia jau ne SQL injection. Tam, beje, irgi yra specialios funkcijos, tad geriau naudoti jas- ir greičiau, ir, jei html standartas, pvz, kiek pasikeistų, kodas išliktų tinkamas (jei php būtų laiku atnaujinta :)) Jos būtų htmlspecialchars arba htmlentities .
Tai vat taip: html kritiški simboliai ir mysql kritiški - ne tas pats ;)
Teisingai foobar pastebėjo.
Aš tik pridursiu, kad saugantis nuo "sql injection" visus SQL užklausos parametrus verta patikrinti/validuoti. Dauguma PHP lib'ų/platformų turi vartotojo įvedamų duomenų tikrinimą, kad tarkim $_GET['id'] reikšmė tikrai yra sveikas teigiamas skaičius o ne tarkim "1;INSER INTO users (...";
prie to paties
http://shiflett.org/archive/184
php kalbos pliusas (o kartu ir minusas) yra tame, kad pas php nėra tipizuojami kintamieji. pvz jei vieną kartą $asilas yra skaičius, tai vėliau jis gali būti masyvas, objektas, ir t.t. tai aš stengiuosi visą laiką tikrinti tipus - ar masyvas (kai man reikia būtent masyvo), ar skaičius ir t.t. tada sumažėja problemų skaičius... šiaip dar visai nieko dalykas yra adodb, jis ten savyje turi daug visko, bet jo trūkumas kad jis griozdas šiek tiek.... na bet čia kaip kam ko reikia.
Radau geresni varijanta:
function escape($sql) {
$safe_sql = mysql_real_escape_string($sql); // escape special characters
$safe_sql = parent::escape($safe_sql); // parent method adds '' around $sql
return $safe_sql;
}
PHP ir MySQL → PHP → Kaip apsisiaugoti nuo SQL injection
Powered by PunBB, supported by Informer Technologies, Inc.