上下文转义
最后更新于:2022-04-02 05:14:02
[TOC]
# 上下文转义
网站和Web应用程序容易受到[XSS](https://www.owasp.org/index.php/XSS)攻击,虽然PHP提供了转义功能,但在某些情况下,它还不够/适当。`Phalcon\Escaper`提供了上下文转义,并以Zephir编写,在转义不同类型的文本时提供最小的开销。
我们基于[OWASP](https://www.owasp.org)创建的[XSS(Cross Site Scripting)](https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet)预防备忘单设计了这个组件。
此外,该组件依赖于 [mbstring](http://php.net/manual/en/book.mbstring.php) 来支持几乎任何字符集。
为了说明此组件的工作原理及其重要性,请考虑以下示例:
```php
";
// 恶意CSS类名称
$className = ";`(";
// 恶意CSS字体名称
$fontName = "Verdana\"";
// 恶意Javascript文本
$javascriptText = "';Hello";
// 创建一个escaper
$e = new Escaper();
?>
escapeHtml($maliciousTitle); ?>
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> </title><script>alert(1)</script> </title> <style type="text/css"> .\3c \2f style\3e { font-family: "Verdana\22 \3c \2f style\3e"; color: red; } </style> </head> <body> <div class='< / style> '> hello </div> <script> var some = '\x27\x3b\x3c\2fscript\x3eHello'; </script> </body> </html> ``` 每个文本都根据其上下文进行了转义。使用适当的上下文对于避免XSS攻击很重要。 ## 转义HTML 插入不安全数据时最常见的情况是在HTML标记之间: ```html
```
您可以使用`escapeHtml`方法转义这些数据:
```php
```
生成:
```html
hello
```
其中产生以下内容:
```html
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> </title><script>alert(1)</script> </title> <style type="text/css"> .\3c \2f style\3e { font-family: "Verdana\22 \3c \2f style\3e"; color: red; } </style> </head> <body> <div class='< / style> '> hello </div> <script> var some = '\x27\x3b\x3c\2fscript\x3eHello'; </script> </body> </html> ``` 每个文本都根据其上下文进行了转义。使用适当的上下文对于避免XSS攻击很重要。 ## 转义HTML 插入不安全数据时最常见的情况是在HTML标记之间: ```html
escapeHtml('>
myattack
'); ?>
></div><h1>myattack</h1>
```
## 转义HTML属性
转义HTML属性与转义HTML内容不同。escaper通过将每个非字母数字字符更改为表单来工作。这种转义是针对大多数简单的属性,不包括像`href`或`url`这样的复杂属性:
```html
Hello |
Hello |