2011-04-15 69 views
0

任何人都可以提供如何從SQL注入安全這個PHP腳本的任何建議:我如何保護這個PHP腳本?

<?php 
include("config.php"); 
if(isset($_POST['lastmsg'])) 
{ 
$lastmsg = mysqli_real_escape_string($_GET['lastmsg']); 
$result=mysql_query("select * from messages where msg_id<'$lastmsg' order by msg_id desc limit 9"); 
$count=mysql_num_rows($result); 
while($row=mysql_fetch_array($result)) 
{ 
$msg_id=$row['ms_gid']; 
$message=$row['message']; 
?> 



<li>[ 
<?php echo $message; ?> 
</li> 


<?php 
} 


?> 

<div id="more<?php echo $msg_id; ?>" class="morebox"> 
<a href="#" id="<?php echo $msg_id; ?>" class="more">more</a> 
</div> 

<?php 
} 
?> 

謝謝:)

+0

是'lastmsg'POST或GET變量嗎?你引用了兩種不同的方式。 – 2011-04-15 19:26:09

+0

它的一個帖子,抱歉只是注意到了。謝謝:) – user663049 2011-04-15 19:29:38

+1

** [PDO](http://php.net/manual/en/book.pdo.php)**。學習它,使用它。 – meagar 2011-04-15 19:54:44

回答

4
$lastmsg = mysqli_real_escape_string($_GET['lastmsg']); 

如果您有機會獲得的mysqli您應該優先使用它到MySQL,因爲它可以讓你的參數綁定到報表從而繞過SQL注入攻擊。程序樣式中的示例代碼:

$link = mysqli_connect(); 
$stmt = mysqli_stmt_init($link); 
mysqli_stmt_prepare($stmt, "select * from messages where msg_id < ? order by msg_id desc limit 9"); 
mysqli_stmt_bind_param($stmt, "s", $_GET['lastmsg']); 
mysqli_stmt_execute($stmt); 
mysqli_stmt_store_result($stmt); 
$count = mysqli_stmt_num_rows($stmt); 
0

mysql_real_escape_string()是你唯一需要的東西。首先將要插入數據庫的任何值傳遞給數據庫。

$someval = mysql_real_escape_string($someval); 
$query = "SELECT ... WHERE field='$someval'";