Giunsa pagpugong sa MySQL ang sql injection? Prinsipyo ug pagpugong sa SQL injection

MySQLGiunsa malikayan ang sql injection? Prinsipyo ug pagpugong sa SQL injection

MySQL ug SQL injection

Kung imong kuhaon ang datos nga gisulod sa user pinaagi sa usa ka web page ug isulod kini sa adatabase sa MySQL, unya mahimo nga adunay mga problema sa seguridad sa SQL injection.

Kini nga kapitulo magpaila kon unsaon pagpugong sa SQL injection ug pagsala sa gi-inject nga mga karakter sa SQL pinaagi sa mga script.

Ang gitawag nga SQL injection mao ang paglingla sa server aron ipatuman ang malisyoso nga SQL commands pinaagi sa pagsal-ot sa SQL commands ngadto sa web form aron isumite o i-input ang query string sa domain name o page request.

Dili gayud kita mosalig sa input sa user, kinahanglan natong isipon nga ang data sa input sa user dili luwas, ug kitang tanan kinahanglan nga magsala sa data sa input sa user.

Sa mosunod nga pananglitan, ang gisulod nga username kinahanglang kombinasyon sa mga letra, numero, ug underscore, ug ang username kinahanglang tali sa 8 ug 20 ka karakter ang gitas-on:

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

Atong tan-awon ang sitwasyon sa SQL nga mahitabo kung walay espesyal nga mga karakter ang nasala:

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

Sa ibabaw nga pahayag sa pag-injection, wala namo gisala ang variable sa $name. Ang SQL nga pahayag nga wala namo kinahanglana gisal-ot sa $name, nga magwagtang sa tanang datos sa lamesa sa mga tiggamit.

Ang mysqli_query() sa PHP dili tugotan nga magbuhat ug daghang SQL nga pahayag, apan ang SQLite ug PostgreSQL makabuhat ug daghang SQL nga pahayag sa samang higayon, mao nga kinahanglan natong higpit nga pamatud-an ang datos niini nga mga tiggamit.

Aron mapugngan ang SQL injection, kinahanglan natong hatagan ug pagtagad ang mosunod nga mga punto:

  • 1. Ayaw gayud pagsalig sa user input.Susiha ang input sa user, mahimo nimong gamiton ang regular nga mga ekspresyon, o limitahan ang gitas-on; i-convert ang usa ka kinutlo ug doble nga "-", ug uban pa.
  • 2. Ayaw gayud gamita ang dynamic assembly sql, mahimo nimong gamiton ang parameterized sql o direkta nga gamiton ang mga stored procedures para sa data query ug access.
  • 3. Ayawg gamita ang database connections nga adunay mga pribilihiyo sa administrator, gamita ang bulag nga database connections nga adunay limitadong pribilihiyo para sa matag aplikasyon.
  • 4. Ayaw pagtago ug kompidensyal nga impormasyon direkta, pag-encrypt o pag-hash out sa mga password ug sensitibo nga impormasyon.
  • 5. Ang eksepsiyon nga impormasyon sa aplikasyon kinahanglang maghatag ug pipila ka pahiwatig kutob sa mahimo, ug labing maayo nga gamiton ang custom nga impormasyon sa sayop aron maputos ang orihinal nga impormasyon sa sayop
  • 6. Ang pamaagi sa pagkakita sa sql injection sa kasagaran nagsagop sa auxiliarySoftwareO ang plataporma sa website aron makit-an, ang software sa kasagaran naggamit sa sql injection detection tool jsky, ug ang website nga plataporma adunay Yisi website security platform detection tool. MDCSOFT SCAN et al.Ang paggamit sa MDCOFT-IPS epektibo nga makapanalipod batok sa SQL injection, mga pag-atake sa XSS, ug uban pa.

Paglikay sa SQL Injection

Sa mga lengguwahe sa scripting sama sa Perl ug PHP makalingkawas ka sa datos nga gisulod sa user aron mapugngan ang SQL injection.

Ang MySQL extension para sa PHP naghatag sa mysqli_real_escape_string() function aron makalingkawas sa espesyal nga input nga mga karakter.

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

Pag-injection sa Sama nga mga Pahayag

Kung mangutana sama sa, kung ang kantidad nga gisulod sa user adunay "_" ug "%", kini mahitabo: ang user sa sinugdan gusto nga mangutana "abcd_", apan adunay "abcd_", "abcde", ug "abcdf" sa ang resulta sa pangutana ug uban pa; ang problema mahitabo usab kung gusto sa user nga mangutana "30%" (note: traynta porsyento).

Sa usa ka script sa PHP mahimo natong gamiton ang addcslashes() function aron madumala ang sitwasyon sa ibabaw, sama sa mosunod nga pananglitan:

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

Ang addcslashes() function nagdugang ug backslash sa wala pa ang gipiho nga karakter.

Syntax format:

addcslashes(string,characters)
Parameterpaghulagway
hiloGikinahanglan.Gipiho ang hilo nga susihon.
karakterKapilian.Nagtino sa kinaiya o han-ay sa mga karakter nga apektado sa addcslashes().

Paglaum Chen Weiliang Blog ( https://www.chenweiliang.com/ ) mipakigbahin "Giunsa ang MySQL pagpugong sa sql injection? SQL Injection Principles and Prevention" aron matabangan ka.

Welcome sa pagpaambit sa link niini nga artikulo:https://www.chenweiliang.com/cwl-500.html

Malipayon nga pag-abut sa channel sa Telegram sa blog ni Chen Weiliang aron makuha ang labing bag-ong mga update!

🔔 Mahimong una nga makakuha sa bililhon nga "ChatGPT Content Marketing AI Tool Usage Guide" sa direktoryo sa taas nga channel! 🌟
📚 Kini nga giya adunay daghang kantidad, 🌟Kini usa ka talagsaon nga oportunidad, ayaw palabya ​​kini! ⏰⌛💨
Share ug like kung ganahan ka!
Ang imong pagpaambit ug pag-like mao ang among padayon nga kadasig!

 

发表 评论

Ang imong email address dili mapatik. Gigamit ang mga kinahanglanon nga uma * Label

scroll sa ibabaw