[英]How to protect this code from sql injection?
嘿,我做了一個文本框,它通過從數據庫中獲取內容來自動完成輸入,現在它的工作方式如下:
<script type="text/javascript">
$().ready(function() {
$("#food").autocomplete("get_course_list.php", {
width: 260,
cacheLength: 10,
matchContains: false,
//mustMatch: true,
//minChars: 0,
//multiple: true,
//highlight: false,
//multipleSeparator: ",",
selectFirst: true
});
});
</script>
這在.php文件中:
<?php
require_once "config2.php";
$q = strtolower($_GET["q"]);
if (!$q) return;
$sql = "select DISTINCT voedsel as voed from voedingswaarden where voedsel LIKE '%$q%'";
$rsd = mysql_query($sql);
while($rs = mysql_fetch_array($rsd)) {
$cname = $rs['voed'];
echo "$cname\n";
}
?>
但是現在我讀到了有關sql注入的知識,所以我想用mysql_real_escape_string()來保護自己的php腳本。 但我似乎無法使其正常工作。 有什么想法如何在我的.php文件中實現這一點,以及是否有足夠的保護措施?
$q = strtolower($_GET["q"]);
變成
$q = mysql_real_escape_string(strtolower($_GET["q"]));
您必須建立與數據庫的連接,並且必須只有一個鏈接,但是這種情況下,否則mysql_query無法正常工作。
該代碼不是很優雅,但可以正常工作。
您可能需要更改以下內容:
if (!$q) return;
至
if (strlen($q) == 0) return;
我之前已經說過,但是我認為mysql_real_escape_string()
應該廢除,而應該使用PDO 。
“ PDO – PHP數據對象–是數據庫訪問層,提供了訪問多個數據庫的統一方法。”
PDO是與數據庫對話的改進的新方法。 PDO准備了一些使您的網站更快/更安全的聲明,原因是:
預准備語句是預編譯的SQL語句,可以通過僅將數據發送到服務器來執行多次。 它具有自動使占位符中使用的數據免受SQL注入攻擊的影響的附加優點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.