参数化语句和安全性
问题描述:
我想使这个页面安全,但我不知道我应该从哪里开始。因为我昨天注入了一些资源,所以我逃避了mysql的转义字符串,但是我没有太多帮助。我不知道任何有关PDO的事情,你能把我搞定吗?这是代码。参数化语句和安全性
<?php
//category.php
require_once('startsession.php');
require_once('php/mysql_prisijungimas.php');
include 'connect.php';
//first select the category based on $_GET['cat_id']
$sql = "SELECT
cat_id,
cat_name,
cat_description
FROM
categories
WHERE
cat_id = " . mysql_real_escape_string($dbc, trim($_GET['id']));
$result = mysql_query($sql);
if(!$result)
{
echo 'The category could not be displayed, please try again later.' . mysql_error();
}
else
{
if(mysql_num_rows($result) == 0)
{
echo 'This category does not exist.';
}
else
{
//display category data
while($row = mysql_fetch_assoc($result))
{
echo '<h2>Topics in ′' . $row['cat_name'] . '′ category</h2><br />';
}
//do a query for the topics
$sql = "SELECT
topic_id,
topic_subject,
topic_date,
topic_cat
FROM
topics
WHERE
topic_cat = " . mysql_real_escape_string($dbc, trim($_GET['id']));
$result = mysql_query($sql);
if(!$result)
{
echo 'The topics could not be displayed, please try again later.';
}
else
{
if(mysql_num_rows($result) == 0)
{
echo 'There are no topics in this category yet.';
}
else
{
//prepare the table
echo '<table border="1">
<tr>
<th>Topic</th>
<th>Created at</th>
</tr>';
while($row = mysql_fetch_assoc($result))
{
echo '<tr>';
echo '<td class="leftpart">';
echo '<h3><a href="topic.php?id=' . $row['topic_id'] . '">' . $row['topic_subject'] . '</a><br /><h3>';
echo '</td>';
echo '<td class="rightpart">';
echo date('d-m-Y', strtotime($row['topic_date']));
echo '</td>';
echo '</tr>';
}
}
}
}
}
?>
答
在你的情况下环绕mysql_real_escape_string加上引号,像这样:
SELECT * FROM table WHERE ID = '".mysql_real_escape_String($_POST['ID'])."'
注意额外的单引号。这将使它更安全,但使用准备好的语句更好。除了喜欢在mysql_query上使用预处理语句外,从php版本5.5.0开始,函数mysql_query()将被弃用。
在stackoverflow上还有另一个主题,它提出了“如何防止PHP Pdo中的SQL注入”问题。你可能会发现一些样本和额外的信息: How can I prevent SQL injection in PHP?
+0
谢谢你的帮助。 – 2013-05-13 15:02:31
那么这将无法与MySQL的扩展。 PDO支持[预先准备的语句](http://php.net/manual/en/pdo.prepared-statements.php) – 2013-05-13 14:12:24
[伟大的逃避现实(或:你需要知道如何处理文本中的文本)](http ://kunststube.net/escapism/) – deceze 2013-05-13 14:27:32