Как я могу защитить этот скрипт PHP?

Может кто-нибудь предложить какие-либо предложения о том, как защитить этот скрипт PHP от SQL инъекций:

 <?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
}
?>

Спасибо:)

2 ответа

Решение
$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);

http://php.net/mysql_real_escape_string - единственное, что вам нужно. Передайте любое значение, которое вы собираетесь вставить в базу данных через это сначала.

$someval = mysql_real_escape_string($someval);
$query = "SELECT ... WHERE field='$someval'";
Другие вопросы по тегам