Как я могу защитить этот скрипт 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'";