gpt4 book ai didi

PHP 网址安全问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:49 26 4
gpt4 key购买 nike

我想让用户将 url 存储在我的数据库中我正在使用 php mysql 和 htmlpurifier 我想知道以下代码是否是在将不良数据存储到数据库之前过滤掉不良数据的好方法?

这是部分 PHP 代码。

$url = mysqli_real_escape_string($mysqli, $purifier->purify(htmlspecialchars(strip_tags($_POST['url'])));

最佳答案

您无需调用 htmlspecialchars()HTMLPurifier关于数据——你真的只有一个问题,那就是确保 URL 不包含 SQL 注入(inject)——mysqli_real_escape_string()将对其进行排序。

或者,如果您要将数据输出到页面/HTML(而不是将其用作 HTTP 重定向 header ),则需要使用 htmlentities()以防止在您输出数据时对数据进行 XSS。黄金法则是情境意识:

HTML entity encoding is okay for untrusted data that you put in the body of the HTML document, such as inside a tag. It even sort of works for untrusted data that goes into attributes, particularly if you're religious about using quotes around your attributes. But HTML entity encoding doesn't work if you're putting untrusted data inside a tag anywhere, or an event handler attribute like onmouseover, or inside CSS, or in a URL. So even if you use an HTML entity encoding method everywhere, you are still most likely vulnerable to XSS. You MUST use the escape syntax for the part of the HTML document you're putting untrusted data into.

有关 XSS 预防的深入引用,请查看 OWASP .

最好在使用数据之前对数据进行编码(以防止相关攻击)(例如,用于输入数据库的 MySQL 转义字符串以防止 SQLi,用于输出到屏幕的 HTML 转义字符串以防止 XSS,两者不能同时使用).这使您可以跟踪通过应用程序的数据流,并且您知道数据库中的所有数据都已准备好用于任何目的。例如,如果您在将此数据放入数据库之前对其进行 HTML 编码,则必须在将其用作 HTTP header 之前对其进行取消编码。

如果您必须在数据进入数据库之前对其进行编码,请确保列名称为 future 的开发人员/维护人员反射(reflect)这一点!

编辑:

根据 VolkerK 的评论,防止 URL 输出中的 XSS 的最佳方法是检查协议(protocol) - 如果它与您允许的协议(protocol)(可能是 http/https)不匹配,则拒绝它:

$url = 'http://hostname/path?arg=value#anchor';

$parsedUrl = parse_url( $url );

if( $parsedUrl['scheme'] != 'http' ) {
// reject URL
} else {
$url = mysqli_real_escape_string( $mysqli, $url );
$sql = "INSERT INTO table (url) VALUES ('$url')";
// insert query
}

这有利于防止 javascript:alert('xss')攻击 <a href="$url">情况。正在运行 htmlentities()javascript:alert('xss')没有影响(因为有限的字符子集,如 <> 不存在以进行转义),因此恶意用户将能够在您的域上执行 JS。

关于PHP 网址安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2561031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com