PHP代码优化-为SELECT查询转义字符串以防止javascript / XSS注入的最佳方法

时间:2019-04-29 13:52:24

标签: php escaping javascript-injection

我想知道转义引号的方式是最好的还是可以改进的。

访问者可以提交文本,该文本存储在数据库中,然后显示在另一个页面中。很简单。我使用 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,标记和引号。

0 个答案:

没有答案