Paano pinipigilan ng MySQL ang sql injection? Prinsipyo at pag-iwas sa SQL injection

MySQLPaano maiwasan ang sql injection? Prinsipyo at pag-iwas sa SQL injection

MySQL at SQL injection

Kung kukunin mo ang data na ipinasok ng user sa pamamagitan ng isang web page at ipasok ito sa isangMySQL database, pagkatapos ay maaaring may mga problema sa seguridad ng SQL injection.

Ipakikilala sa iyo ng kabanatang ito kung paano maiwasan ang SQL injection at gumamit ng mga script para salain ang mga injected na character sa SQL.

Ang tinatawag na SQL injection ay para linlangin ang server na magsagawa ng mga nakakahamak na SQL command sa pamamagitan ng pagpasok ng mga SQL command sa web form para isumite o ipasok ang query string ng domain name o page request.

Hindi tayo dapat magtiwala sa input ng user, dapat nating ipagpalagay na hindi ligtas ang data ng input ng user, at kailangan nating lahat na i-filter ang data ng input ng user.

Sa sumusunod na halimbawa, ang inilagay na username ay dapat na kumbinasyon ng mga titik, numero, at underscore, at ang username ay dapat nasa pagitan ng 8 at 20 character ang haba:

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

Tingnan natin ang sitwasyon ng SQL na nangyayari kapag walang na-filter na mga espesyal na character:

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

Sa itaas na statement ng injection, hindi namin na-filter ang variable ng $name, at ang SQL statement na hindi namin kailangan ay ipinasok sa $name, na magtatanggal ng lahat ng data sa talahanayan ng mga user.

Ang mysqli_query() sa PHP ay hindi pinapayagang magsagawa ng maraming SQL statement, ngunit sa SQLite at PostgreSQL, maraming SQL statement ang maaaring isagawa nang sabay-sabay, kaya kailangan nating mahigpit na i-verify ang data ng mga user na ito.

Upang maiwasan ang SQL injection, kailangan nating bigyang pansin ang mga sumusunod na punto:

  • 1. Huwag kailanman magtiwala sa input ng user.Suriin ang input ng user, maaari kang gumamit ng mga regular na expression, o limitahan ang haba; i-convert ang mga solong quote at dobleng "-", atbp.
  • 2. Huwag gumamit ng dynamic na assembly sql, maaari mong gamitin ang parameterized na sql o direktang gumamit ng mga stored procedure para sa query at access ng data.
  • 3. Huwag kailanman gumamit ng mga koneksyon sa database na may mga pribilehiyo ng administrator, gumamit ng hiwalay na mga koneksyon sa database na may limitadong mga pribilehiyo para sa bawat aplikasyon.
  • 4. Huwag mag-imbak ng kumpidensyal na impormasyon nang direkta, i-encrypt o i-hash out ang mga password at sensitibong impormasyon.
  • 5. Ang impormasyon sa pagbubukod ng application ay dapat magbigay ng kaunting pahiwatig hangga't maaari, at pinakamahusay na gumamit ng custom na impormasyon ng error upang ibalot ang orihinal na impormasyon ng error
  • 6. Ang paraan ng pagtuklas ng sql injection sa pangkalahatan ay gumagamit ng auxiliary软件O ang platform ng website upang makita, ang software ay karaniwang gumagamit ng sql injection detection tool na jsky, at ang platform ng website ay mayroong Yisi website security platform detection tool. MDCSOFT SCAN et al.Ang paggamit ng MDCOFT-IPS ay maaaring epektibong ipagtanggol laban sa SQL injection, XSS attacks, atbp.

Pigilan ang SQL Injection

Sa mga wikang scripting tulad ng Perl at PHP maaari mong takasan ang data na ipinasok ng user upang maiwasan ang SQL injection.

Ang MySQL extension para sa PHP ay nagbibigay ng mysqli_real_escape_string() function upang makatakas sa mga espesyal na input character.

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

Injection sa Like Statements

Kapag nag-query tulad ng, kung ang value na ipinasok ng user ay may "_" at "%", ito ang mangyayari: orihinal na gustong i-query ng user ang "abcd_", ngunit mayroong "abcd_", "abcde", at "abcdf" sa ang resulta ng query atbp.; nangyayari rin ang problema kapag gusto ng user na mag-query ng "30%" (tandaan: tatlumpung porsyento).

Sa isang script ng PHP maaari naming gamitin ang addcslashes() function upang mahawakan ang sitwasyon sa itaas, tulad ng sa sumusunod na halimbawa:

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

Ang addcslashes() function ay nagdaragdag ng backslash bago ang tinukoy na character.

Syntax format:

addcslashes(string,characters)
参数paglalarawan
pisiKailangan.Tinutukoy ang string na susuriin.
characterOpsyonal.Tinutukoy ang karakter o hanay ng mga character na apektado ng addcslashes().

Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) ibinahagi "Paano pinipigilan ng MySQL ang sql injection? sql injection principle and prevention", makakatulong ito sa iyo.

Maligayang pagdating upang ibahagi ang link ng artikulong ito:https://www.chenweiliang.com/cwl-500.html

Maligayang pagdating sa Telegram channel ng blog ni Chen Weiliang para makuha ang pinakabagong mga update!

🔔 Maging una upang makuha ang mahalagang "ChatGPT Content Marketing AI Tool Usage Guide" sa direktoryo ng nangungunang channel! 🌟
📚 Ang gabay na ito ay naglalaman ng malaking halaga, 🌟Ito ay isang bihirang pagkakataon, huwag palampasin ito! ⏰⌛💨
Share and like kung gusto mo!
Ang iyong pagbabahagi at pag-like ay ang aming patuloy na pagganyak!

 

发表 评论

Ang iyong email address ay hindi mai-publish. 必填 项 已 用 * Tatak

mag-scroll sa itaas