我想知道转义引号的方式是最好的还是可以改进的。
访问者可以提交文本,该文本存储在数据库中,然后显示在另一个页面中。很简单。我使用 PDO prepared statements 存储在数据库中:
$sql = "INSERT INTO inscriptions (
name,
surname,
comments
)
VALUES (
:name,
:surname,
:comments
)";
$req = $db->prepare($sql);
$req->execute(array(
':name' => $name,
':surname' => $surname,
':comments' => $comments
));
我明白了,这是引起我质疑的以下部分:
然后显示它,我使用htmlentities
来防止引号和javascript干扰代码。
我还使用array_walk_recursive
(或array_map
(视情况而定))自动进行转义。
<?php function escaped(&$item)
{
$item = htmlentities($item);
}
$sql = "SELECT *
FROM master_table";
$req->execute();
$req = $db->prepare($sql);
while($row=$req->fetch()){
array_walk_recursive($row, 'escaped'); ?>
<p><?php echo $row["comments"]; ?></p>
<form action="supp.php" method="post" onsubmit="return confirm('Do you want to delete <?php echo $row["surname"].' '.$row["name"]; ?> comment ?')">
<input type="hidden" value="<?php echo $row["id"]; ?>" name="idcom" />
<input type="image" alt="Delete" src="trash.png"/>
</form>
<?php } ?>
(此代码用于在删除带有警报的注释之前,因此,转义的重要性是因为警报中使用了该名称)
此代码可以正常工作,但我想是否正在逃避正确且安全的方式。
如果我的帖子中有些内容不清楚,请对其进行评论,以便我进行修改。
谢谢!
编辑:不是要询问SQL注入,而是要用户在字段上输入Javascript,标记和引号。