2016-01-30 80 views
2

我試圖儘可能地過濾出來以防止討厭的SQL注入,這裏是我的代碼示例,有什麼我失蹤?我錯過了什麼? SQL注入

$name = htmlspecialchars($row['name']); 
echo '<div class="col-sm-7">'.$name.'</div>'; 

在我的HTML代碼^

if($_POST["name"]) { 
if (preg_match("/[^A-Za-z'-]/",$_POST['name'])) { 
    die ("Invalid characters."); 
} 

$name = mysqli_real_escape_string($conn, trim($_POST['name'])); 

,所以我的代碼包括以上這些,有什麼我丟失,可以進一步防止?

一個問題

所以我必須過濾掉我自己的定義,因爲這個數據是不是從我的形式來?例如

$currentdate = mysqli_real_escape_string($conn, trim(date("Y-m-d h:i:sa")));

+5

然後使用具有替代參數的準備好的陳述 – RiggsFolly

+0

您不必過濾掉任何「無效字符」,這沒有任何意義。使用轉義(就像你已經做過的那樣),或者甚至更好地使用「準備好的語句」和「參數綁定」。 – arkascha

+0

並查看[手冊]中的filter_'函數集(http://php.net/manual/en/book.filter.php) – RiggsFolly

回答

3

我個人認爲,你沒事SQL注入,但我想看看一些的人都在說,在評論什麼。

在另一方面,無關SQL注入,你可能要考慮使用$name作爲strip_tags很好地去掉任何不必要的HTML字符。

+0

你把*賣給了我「另一張紙條」* ;-) –

+0

乾杯,我現在把它加入到我的php中:) – PizzaBoy