thisispiers/xss-escape

OWASP跨站脚本预防备忘录的PHP实现

1.0.2 2024-08-20 15:16 UTC

This package is auto-updated.

Last update: 2024-09-20 15:29:55 UTC


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 PurifierDOMPurify

安全的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 被转换为字符串

如果 $wraptrue,则返回的字符串将以前置空格、属性名、等号和双引号包裹,例如 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');