Kif MySQL jipprevjeni l-injezzjoni sql? Prinċipju u prevenzjoni ta 'injezzjoni SQL

MySQLKif tipprevjeni l-injezzjoni sql? Prinċipju u prevenzjoni ta 'injezzjoni SQL

MySQL u injezzjoni SQL

Jekk tieħu d-dejta mdaħħla mill-utent permezz ta’ paġna tal-web u daħħalha f’adatabase MySQL, allura jista 'jkun hemm problemi ta' sigurtà ta 'injezzjoni SQL.

Dan il-kapitolu jintroduċik kif tipprevjeni l-injezzjoni SQL u tuża skripts biex tiffiltra karattri injettati fl-SQL.

L-hekk imsejħa injezzjoni SQL hija li tqarraq lis-server biex tesegwixxi kmandi SQL malizzjużi billi ddaħħal kmandi SQL fil-formola tal-web biex tissottometti jew ddaħħal is-sekwenza ta 'mistoqsijiet tal-isem tad-dominju jew it-talba tal-paġna.

Qatt m'għandna nafdaw l-input tal-utent, irridu nassumu li d-dejta tal-input tal-utent mhix sigura, u lkoll għandna bżonn niffiltraw id-dejta tal-input tal-utent.

Fl-eżempju li ġej, l-isem tal-utent imdaħħal għandu jkun taħlita ta’ ittri, numri, u linji ta’ taħt, u l-isem tal-utent għandu jkun twil bejn 8 u 20 karattru:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysqli_query($conn, "SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

Ejja nagħtu ħarsa lejn is-sitwazzjoni SQL li sseħħ meta l-ebda karattru speċjali ma jiġi ffiltrat:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

Fid-dikjarazzjoni ta 'l-injezzjoni ta' hawn fuq, aħna ma ffiltrajniex il-varjabbli ta '$name.Id-dikjarazzjoni SQL li m'għandniex bżonn hija mdaħħla f'$name, li se tħassar id-dejta kollha fit-tabella ta' l-utenti.

mysqli_query() f'PHP mhux permess li jesegwixxi dikjarazzjonijiet SQL multipli, iżda SQLite u PostgreSQL jistgħu jesegwixxu dikjarazzjonijiet SQL multipli fl-istess ħin, għalhekk għandna bżonn nivverifikaw b'mod strett id-dejta ta 'dawn l-utenti.

Biex tipprevjeni l-injezzjoni SQL, irridu nagħtu attenzjoni għall-punti li ġejjin:

  • 1. Qatt ma tafda l-input tal-utent.Iċċekkja l-input tal-utent, tista 'tuża espressjonijiet regolari, jew tillimita t-tul; ikkonverti kwotazzjonijiet singoli u doppju "-", eċċ.
  • 2. Qatt tuża sql ta 'assemblaġġ dinamiku, tista' tuża sql parametrizzat jew tuża direttament proċeduri maħżuna għal mistoqsija u aċċess tad-dejta.
  • 3. Qatt tuża konnessjonijiet ta 'database bi privileġġi ta' amministratur, uża konnessjonijiet ta 'database separati bi privileġġi limitati għal kull applikazzjoni.
  • 4. Taħżinx informazzjoni kunfidenzjali direttament, tikkriptaġġ jew hash out passwords u informazzjoni sensittiva.
  • 5. L-informazzjoni ta 'eċċezzjoni ta' l-applikazzjoni għandha tagħti l-inqas ħjiel possibbli, u huwa aħjar li tuża informazzjoni ta 'żball tad-dwana biex tkebbeb l-informazzjoni ta' żball oriġinali
  • 6. Il-metodu ta 'skoperta ta' injezzjoni sql ġeneralment jadotta awżiljarju软件Jew il-pjattaforma tal-websajt biex tiskopri, is-softwer ġeneralment juża l-għodda ta 'skoperta ta' injezzjoni sql jsky, il-pjattaforma tal-websajt għandha l-għodda ta 'skoperta tal-pjattaforma tas-sigurtà tal-websajt Yisi. MDCSOFT SCAN et al.L-użu ta 'MDCSOFT-IPS jista' jiddefendi b'mod effettiv kontra injezzjoni SQL, attakki XSS, eċċ.

Prevenzjoni SQL Injezzjoni

Fil-lingwi tal-kitba bħal Perl u PHP tista' taħrab id-dejta mdaħħla mill-utent biex tipprevjeni l-injezzjoni SQL.

L-estensjoni MySQL għall-PHP tipprovdi l-funzjoni mysqli_real_escape_string() biex taħrab karattri ta’ input speċjali.

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysqli_real_escape_string($conn, $name);
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

Injezzjoni f'Dikjarazzjonijiet Simili

Meta tagħmel mistoqsija bħal, jekk l-utent idaħħal valuri b'"_" u "%", dan jiġri: l-utent oriġinarjament ried jistaqsi "abcd_", iżda r-riżultati tal-mistoqsija jinkludu "abcd_", "abcde" u "abcdf". " Eċċ.; il-problema sseħħ ukoll meta l-utent irid jagħmel mistoqsija "30%" (nota: tletin fil-mija).

Fi skript PHP nistgħu nużaw il-funzjoni addcslashes () biex nittrattaw is-sitwazzjoni ta 'hawn fuq, bħal fl-eżempju li ġej:

$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_");
// $sub == \%something\_
 mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

Il-funzjoni addcslashes() iżżid backslash qabel il-karattru speċifikat.

Format tas-sintassi:

addcslashes(string,characters)
参数deskrizzjoni
sekwenzaMeħtieġ.Jispeċifika s-sekwenza li trid tiċċekkja.
karattriFakultattiv.Jispeċifika l-karattru jew il-firxa ta' karattri affettwati minn addcslashes().

发表 评论

您的邮箱地址不会被公开。 Jintużaw l-oqsma meħtieġa * Tikketta

Skrollja Top