voku / anti-xss
anti xss 库
Requires
- php: >=7.0.0
- voku/portable-utf8: ~6.0.2
Requires (Dev)
- phpunit/phpunit: ~6.0 || ~7.0 || ~9.0
- dev-master / 4.1.x-dev
- 4.1.42
- 4.1.41
- 4.1.40
- 4.1.39
- 4.1.38
- 4.1.37
- 4.1.36
- 4.1.35
- 4.1.34
- 4.1.33
- 4.1.32
- 4.1.31
- 4.1.30
- 4.1.29
- 4.1.28
- 4.1.27
- 4.1.26
- 4.1.25
- 4.1.24
- 4.1.23
- 4.1.22
- 4.1.21
- 4.1.20
- 4.1.19
- 4.1.18
- 4.1.17
- 4.1.16
- 4.1.15
- 4.1.14
- 4.1.13
- 4.1.12
- 4.1.11
- 4.1.10
- 4.1.9
- 4.1.8
- 4.1.7
- 4.1.6
- 4.1.5
- 4.1.4
- 4.1.3
- 4.1.2
- 4.1.1
- 4.1.0
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- 3.1.0
- 3.0.1
- 3.0.0
- 2.3.1
- 2.3.0
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.7
- 2.1.6
- 2.1.5
- 2.1.4
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.10
- 2.0.9
- 2.0.8
- 2.0.7
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.2.14
- 1.2.13
- 1.2.12
- 1.2.11
- 1.2.10
- 1.2.9
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.1
- 1.1.0
- 1.0.13
- 1.0.12
- 1.0.11
- 1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0
- dev-renovate/shivammathur-setup-php-2.x
- dev-renovate/actions-checkout-digest
- dev-renovate/actions-cache-4.x
- dev-renovate/major-github-artifact-actions
- dev-renovate/phpunit-phpunit-11.x
- dev-renovate/codecov-codecov-action-4.x
- dev-renovate/actions-cache-3.x
- dev-analysis-541yrr
- dev-analysis-a6oKYx
- dev-renovate/phpunit-phpunit-10.x
- dev-analysis-DyK9KB
- dev-analysis-wjYmvo
- dev-analysis-nNP5Ew
- dev-analysis-KZjy7A
- dev-dependabot/add-v2-config-file
- dev-analysis-bQ6O9M
- dev-php_old
This package is auto-updated.
Last update: 2024-09-09 17:25:20 UTC
README
㊙️ AntiXSS
"跨站脚本(XSS)是一种计算机安全漏洞,通常存在于Web应用程序中。XSS允许攻击者向其他用户查看的网页中注入客户端脚本。跨站脚本漏洞可能被攻击者用来绕过如同源策略等访问控制。截至2007年,Symantec记录的所有安全漏洞中,约有84%是由网站上的跨站脚本引起的。" - http://en.wikipedia.org/wiki/Cross-site_scripting
DEMO
http://anti-xss-demo.suckup.de/
注意
-
使用 filter_input() - 不要直接使用 GLOBAL-Array(例如 $_SESSION, $_GET, $_POST, $_SERVER)
-
如果需要更灵活的解决方案,请使用 html-sanitizer 或 HTML Purifier
-
添加 "内容安全策略" 的 内容安全策略简介
-
不要编写自己的正则表达式来解析HTML!
-
阅读此文本 -> XSS(跨站脚本)预防备忘单
-
测试此工具 -> Zed Attack Proxy (ZAP)
通过 "composer require" 安装
composer require voku/anti-xss
用法
use voku\helper\AntiXSS; require_once __DIR__ . '/vendor/autoload.php'; // example path $antiXss = new AntiXSS();
示例 1: (HTML 字符)
$harm_string = "Hello, i try to <script>alert('Hack');</script> your site"; $harmless_string = $antiXss->xss_clean($harm_string); // Hello, i try to alert('Hack'); your site
示例 2: (十六进制 HTML 字符)
$harm_string = "<IMG SRC=javascript:alert('XSS')>"; $harmless_string = $antiXss->xss_clean($harm_string); // <IMG >
示例 3: (十六进制 Unicode 字符)
$harm_string = "<a href=' javascript:alert(1)'>CLICK</a>"; $harmless_string = $antiXss->xss_clean($harm_string); // <a >CLICK</a>
示例 4: (Unicode 字符)
$harm_string = "<a href=\"\u0001java\u0003script:alert(1)\">CLICK<a>"; $harmless_string = $antiXss->xss_clean($harm_string); // <a >CLICK</a>
示例 5.1: (非内联 CSS)
$harm_string = '<li style="list-style-image: url(javascript:alert(0))">'; $harmless_string = $antiXss->xss_clean($harm_string); // <li >
示例 5.2: (带内联 CSS)
$harm_string = '<li style="list-style-image: url(javascript:alert(0))">'; $antiXss->removeEvilAttributes(array('style')); // allow style-attributes $harmless_string = $antiXss->xss_clean($harm_string); // <li style="list-style-image: url(alert(0))">
示例 6: (检查字符串是否包含 XSS 攻击)
$harm_string = "\x3cscript src=http://www.example.com/malicious-code.js\x3e\x3c/script\x3e"; $harmless_string = $antiXss->xss_clean($harm_string); // $antiXss->isXssFound(); // true
示例 7: (允许例如 iframes)
$harm_string = "<iframe width="560" onclick="alert('xss')" height="315" src="https://www.youtube.com/embed/foobar?rel=0&controls=0&showinfo=0" frameborder="0" allowfullscreen></iframe>"; $antiXss->removeEvilHtmlTags(array('iframe')); $harmless_string = $antiXss->xss_clean($harm_string); // <iframe width="560" height="315" src="https://www.youtube.com/embed/foobar?rel=0&controls=0&showinfo=0" frameborder="0" allowfullscreen></iframe>
单元测试
- Composer 是运行测试的前提条件。
composer install
- 可以通过从根目录运行此命令来执行测试
./vendor/bin/phpunit
AntiXss 方法
addDoNotCloseHtmlTags(string[] $strings): $this
↑ 向 "_do_not_close_html_tags"-数组添加一些字符串。
参数
string[] $strings
返回
$this
addEvilAttributes(string[] $strings): $this
↑ 向 "_evil_attributes"-数组添加一些字符串。
参数
string[] $strings
返回
$this
addEvilHtmlTags(string[] $strings): $this
↑ 向 "_evil_html_tags"-数组添加一些字符串。
参数
string[] $strings
返回
$this
addNeverAllowedCallStrings(string[] $strings): $this
↑ 向 "_never_allowed_call_strings"-数组添加一些字符串。
参数
string[] $strings
返回
$this
addNeverAllowedJsCallbackRegex(string[] $strings): $this
↑ 将一些字符串添加到 "_never_allowed_js_callback_regex"-数组中。
参数
string[] $strings
返回
$this
addNeverAllowedOnEventsAfterwards(string[] $strings): $this
↑ 将一些字符串添加到 "_never_allowed_on_events_afterwards"-数组中。
参数
string[] $strings
返回
$this
addNeverAllowedRegex(string[] $strings): $this
↑ 将一些字符串添加到 "_never_allowed_regex"-数组中。
参数
string[] $strings
返回
$this
addNeverAllowedStrAfterwards(string[] $strings): $this
↑ 将一些字符串添加到 "_never_allowed_str_afterwards"-数组中。
参数
string[] $strings
返回
$this
isXssFound(): bool|null
↑ 检查 "AntiXSS->xss_clean()" 方法在上次运行中是否发现了 XSS 攻击。
参数: 无
返回
bool|null <p>如果 "xss_clean()" 没有运行,将返回 null.</p>
removeDoNotCloseHtmlTags(string[] $strings): $this
↑ 从 "_do_not_close_html_tags"-数组中移除一些字符串。
WARNING: 仅在有充分理由的情况下使用此方法。
参数
string[] $strings
返回
$this
removeEvilAttributes(string[] $strings): $this
↑ 从 "_evil_attributes"-数组中移除一些字符串。
WARNING: 仅在有充分理由的情况下使用此方法。
参数
string[] $strings
返回
$this
removeEvilHtmlTags(string[] $strings): $this
↑ 从 "_evil_html_tags"-数组中移除一些字符串。
WARNING: 仅在有充分理由的情况下使用此方法。
参数
string[] $strings
返回
$this
removeNeverAllowedCallStrings(string[] $strings): $this
↑ 从 "_never_allowed_call_strings"-数组中移除一些字符串。
WARNING: 仅在有充分理由的情况下使用此方法。
参数
string[] $strings
返回
$this
removeNeverAllowedJsCallbackRegex(string[] $strings): $this
↑ 从 "_never_allowed_js_callback_regex"-数组中移除一些字符串。
WARNING: 仅在有充分理由的情况下使用此方法。
参数
string[] $strings
返回
$this
removeNeverAllowedOnEventsAfterwards(string[] $strings): $this
↑ 从 "_never_allowed_on_events_afterwards"-数组中移除一些字符串。
WARNING: 仅在有充分理由的情况下使用此方法。
参数
string[] $strings
返回
$this
removeNeverAllowedRegex(string[] $strings): $this
↑ 从 "_never_allowed_regex"-数组中移除一些字符串。
WARNING: 仅在有充分理由的情况下使用此方法。
参数
string[] $strings
返回
$this
removeNeverAllowedStrAfterwards(string[] $strings): $this
↑ 从 "_never_allowed_str_afterwards"-数组中移除一些字符串。
WARNING: 仅在有充分理由的情况下使用此方法。
参数
string[] $strings
返回
$this
setReplacement(string $string): $this
↑ 设置不允许的字符串的替换字符串。
参数
string $string
返回
$this
setStripe4byteChars(bool $bool): $this
↑ 设置是否条纹 4-字节字符的选项。
INFO: 如果你的数据库(MySQL)不能使用 "utf8mb4" -> 防止存储 XSS 攻击
参数
bool $bool
返回
$this
xss_clean(string|string[] $str): string|string[]
↑ XSS 清理
通过清理数据,防止 "跨站脚本" 攻击。此方法做了大量工作,但非常彻底,旨在防止最隐蔽的 XSS 尝试。但请记住,没有任何方法是100%万无一失的...
注意: 应仅用于处理提交的数据。这不应该用于通用运行时处理。
参数
TXssCleanInput $str <p>输入数据,例如字符串或字符串数组</p>
返回
string|string[]
支持
有关支持和捐赠,请访问 Github | 问题 | PayPal | Patreon。
有关状态更新和发布公告,请访问 发布 | Twitter | Patreon。
如需专业支持,请联系 我。
谢谢
- 感谢 GitHub(微软)提供代码托管和良好的基础设施,包括问题管理等。
- 感谢 IntelliJ,它们提供了最好的PHP IDE,并且为我提供了PhpStorm的开放源代码许可!
- 感谢 Travis CI,它是最好的、最易用的持续集成工具!
- 感谢 StyleCI,它提供了简单但强大的代码风格检查。
- 感谢 PHPStan 以及 Psalm,它们提供了真正优秀的静态分析工具,并在代码中发现了错误!