PHP filter_var 用于防止 XSS 攻击的 URL

标签 php xss

这是我的功能:

function is_url($url) {
    return (preg_match('#^(https?):\/\/#i', $url) && (filter_var($url, FILTER_VALIDATE_URL) !== FALSE));
}

这是一个很好的 url,它验证为 true:

http://blah.com"onclick="alert(document.cookie)

想象一下,如果这进入<a href="<?php echo $url; ?>">

是否有更好的正则表达式 URL 验证器?或者我正在测试的 URL 实际上是一个有效的 URL(在这种情况下我需要 XSS 清理功能)?

最佳答案

有这个内置的 filter :

filter_var($url, FILTER_VALIDATE_URL);

这将返回 false 以及您的示例 URL。如果有效,它将返回$url。示例:

glopes@nebm:~$ php -r "var_dump(filter_var('http://blah.com\"onclick=\"alert(document.cookie)', FILTER_VALIDATE_URL));"
bool(false)

Anyway, the solution to prevent XSS is to use htmlspecialchars. Since it's an attribute, you should use ENT_QUOTES:

htmlspecialchars($data, ENT_QUOTES);

但是您还应该验证 URL,否则用户可能会包含 javascript: 之类的“URL”。

关于PHP filter_var 用于防止 XSS 攻击的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3254512/

相关文章:

javascript - PHP 回显 javascript

php - FPDF - 生成的 PDF 无法在浏览器中正确显示

javascript - 在 html 标签中禁用 js

javascript - 服务器端的哄骗

PHP/MySQL - 检查双人 session 室预订

php - OpenSSL 真的需要 openssl.conf 的路径吗?

php - iWork - 导致 index.html 文件出现问题

ajax - 内容类型 text/json 是否具有安全隐患?

escaping - 在 mustache 模板变量中混合未净化的数据、HTML

c# - HttpUtility.HtmlEncode、HttpUtility.HtmlDecode、AntiXSS 库和正确格式化用户输入