php - 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、标签和引号用户可以放在一个字段上。
解决方案
推荐阅读
- python - Wait for every element in Selenium
- mysql - Any possibility to speed up WHERE IN or replace it with faster alternative?
- node.js - GraphQL: Creating and Returning an Object in a Resolver?
- python - 快速从 Python 列表中删除异常值?
- graphql - HyperGraphQL- Federating the SPARQL across multiple services
- css - Bulma align button at the bottom of a column
- javascript - 带有文本和不同颜色的圆形范围滑块
- node.js - 获取使用 Playwright 启动的浏览器的 pid
- clickhouse - 当一个副本在分片中关闭时插入可用性
- visual-studio-code - 在 Visual Studio Code 上运行 Fortran 时遇到问题