2012-05-26 81 views
0

可能重複:
Best way to stop SQL Injection in PHP停止SQL注入

我試着用搜索引擎的幫助,但它不是那麼容易,因爲你會想到。如果有人可以告訴我如何保護SQL,甚至可以給我一個好網站的鏈接,以學習如何自己做。

如果你甚至可以善待解決它,並告訴我什麼是錯的,我一定會記下來,並確保我的其他代碼。

<?php 
    $post = htmlspecialchars($_GET["id"]); 
    $results = mysql_query("SELECT * FROM tool WHERE id = $post"); 
    $authorr = $_SESSION['Username']; 

while($row = mysql_fetch_array($results)){ 
$capsd = ucfirst($author); 
$title= $row['title']; 
$details= $row['details']; 
$author= $row['author']; 
$date= $row['date']; 
$img= $row['featuredimage']; 
$id= $row['id']; 



    echo "<table border=1><tr><td width=100px> 
       <b><u><center>"; 
    echo $title; 
    echo "</center></u></td> <td width=100px><center>"; 
    echo $date; 
    echo "</center></td> <td width=100px><b><center>"; 
    echo ucfirst($author); 
    echo "</center></b></td>"; 

    if (in_array($authorr, $allowedposters)) { 
    echo "<center><td width=20px><a href=edit.php?id="; 
    echo $id; 
    echo "><b>Edit</b></a></center></td>"; 
    } 
    echo "</tr></table>"; 
    echo "<img src=http://www.removed.com/news/"; 
    echo $img; 
    echo " height=300 width=400> <br><br>"; 
    echo $details; 

    } 
    ?> 
+0

在這個特定情況下,唯一的注入風險是將'$ post'放到SQL查詢中。由於它是整數值,因此可以像這樣得到它:'$ post = intval($ _ GET [「id」]);'。 'intval'保證返回有效整數(如果傳入的字符串中沒有任何整數,則返回0)。它不能包含任何SQL注入,因此它很安全。它不能包含任何HTML代碼,所以'htmlspecialchars'調用變得沒有必要。請注意,如果可以存儲由用戶輸入的某些HTML代碼,則必須使用'htmlspecialchars'處理'$ title','$ date'等值。否則就是XSS風險。 –

回答