簡體   English   中英

如何保護此代碼免受sql注入?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM