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

问题描述

我想知道我转义引号的方式是否最好,或者是否可以增强。

访问者可以提交存储在数据库中的文本,然后显示在另一个页面中。很简单。我使用PDO 准备好的语句存储在数据库中:

$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、标签和引号用户可以放在一个字段上。

标签: phpescapingjavascript-injection

解决方案


推荐阅读