thisispiers / xss-escape
OWASP跨站脚本预防备忘录的PHP实现
Requires
- php: >=7.1
- ext-mbstring: *
README
OWASP的跨站脚本预防备忘录的PHP实现(点击查看)
基于LGPL v3.0发布。需要PHP >= 7.1和mbstring扩展
使用Composer安装 composer require thisispiers/xss-escape
用法
根据上下文,不受信任的数据应该以不同的方式编码。此库为每个上下文提供了静态方法。
HTML主体中的文本
例如 <span>UNTRUSTED DATA</span>
htmlBody(mixed $untrusted_data): string
$untrusted_data
被转换为字符串
HTML主体中的HTML
例如 <div>UNTRUSTED HTML</div>
在此上下文中使用完整的HTML验证器,例如HTML Purifier或DOMPurify
安全的HTML属性
例如 <input type="text" name="field_name" value="UNTRUSTED DATA">
htmlAttr(string $attr, mixed $untrusted_data, bool $wrap = true): string
$attr
必须是以下之一
- align
- alink
- alt
- bgcolor
- border
- cellpadding
- cellspacing
- class
- color
- cols
- colspan
- coords
- dir
- face
- height
- href (见URLs)
- hspace
- ismap
- lang
- marginheight
- marginwidth
- multiple
- nohref
- noresize
- noshade
- nowrap
- ref
- rel
- rev
- rows
- rowspan
- scrolling
- shape
- span
- src (见URLs)
- summary
- tabindex
- title
- usemap
- valign
- value
- vlink
- vspace
- width
$untrusted_data
被转换为字符串
如果 $wrap
为 true
,则返回的字符串将以前置空格、属性名、等号和双引号包裹,例如 value="ENCODED DATA"
。
URLs
HTML属性中的URLs,例如 <iframe src="UNTRUSTED URL" />
或 <a href="UNTRUSTED URL">link</a>
validateUrl(mixed $untrusted_data): bool
$untrusted_data
被转换为字符串
不受信任的URL目前仅检查是否为HTTPS。这是一个粗略的检查,以避免成为一个完整的URL解析库。强烈建议您对不受信任的URL运行更复杂的验证,例如通过主机名拒绝URL。
JavaScript变量
例如 <script>var someValue='UNTRUSTED DATA';</script>
或 <script>someFunction('UNTRUSTED DATA');</script>
jsVar(mixed $untrusted_data): string
$untrusted_data
被转换为字符串
CSS值
例如 <div style="width: UNTRUSTED DATA;">
cssValue(mixed $untrusted_data): string
$untrusted_data
被转换为字符串
URL参数
例如 <a href="/site/search?value=UNTRUSTED DATA">link</a>
urlParam(mixed $untrusted_data): string
$untrusted_data
被转换为字符串
HTML中的JSON
jsonInHtml(mixed $untrusted_data): string
$untrusted_data
被转换为字符串
在调用 JSON.parse
之前,在隐藏元素中输出JSON,例如。
<div id="data" style="display:none"><?php echo \thisispiers\Xss\Escape::jsonInHtml($untrusted_data); ?></div>
<script>var data = JSON.parse(document.getElementById('data').textContent);</script>
贡献 & 帮助
不要期望频繁更新,但欢迎提交关于安全和性能改进的pull request!
不保证此库符合最新的OWASP备忘录推荐。如果您认为它过时了,请创建一个issue,或者开始一个pull request。
为了节省按键,您可能想为此类创建一个别名,例如 class_alias('\\thisispiers\Xss\\Escape', '\\esc');