©
Dieses Dokument verwendet PHP-Handbuch für chinesische Websites Freigeben
SecurityClass包含帮助您创建安全应用程序的方法,用于处理安全输入数据。
XSS滤波
跨站点请求伪造%28CSRF%29
类引用
CodeIgniter附带了一个跨站点脚本预防过滤器,它寻找常用的技术来触发JavaScript或其他类型的代码,这些代码试图劫持cookie或做其他恶意的事情。如果遇到任何不允许的情况,则通过将数据转换为字符实体来安全地呈现。
若要通过XSS筛选器筛选数据,请使用xss_clean()
方法:
$data = $this->security->xss_clean($data);
可选的第二个参数,是[医]图像,允许使用此函数测试图像是否可能受到XSS攻击,这对于文件上传安全性非常有用。如果第二个参数设置为true,而不是返回修改过的字符串,则如果图像安全,则返回true;如果图像包含浏览器可能试图执行的恶意信息,则返回false。
if ($this->security->xss_clean($file, TRUE) === FALSE){ // file failed the XSS test}
重要
如果您想过滤HTML属性值,请html_escape()
改为使用!
您可以通过更改application/config/config.php以下列方式存档:
$config['csrf_protection'] = TRUE;
如果您使用表单助手,然后form_open()
将自动在窗体中插入隐藏的CSRF字段。如果没有,那么您可以使用get_csrf_token_name()
和get_csrf_hash()
$csrf = array( 'name' => $this->security->get_csrf_token_name(), 'hash' => $this->security->get_csrf_hash());...<input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />
令牌可以在每次提交时重新生成(默认),也可以在CSRF Cookie的整个生命周期内保持不变。默认的令牌重新生成提供了更严格的安全性,但可能会导致其他令牌无效(后退/前进导航,多个选项卡/窗口,异步操作等)的可用性问题。您可以通过编辑以下配置参数来改变此行为
$config['csrf_regenerate'] = TRUE;
选择URI可以通过csrf保护列入白名单(例如期望外部发布内容的API端点)。您可以通过编辑'csrf_exclude_uris'配置参数来添加这些URI:
$config['csrf_exclude_uris'] = array('api/person/add');
正则表达式也被支持(不区分大小写):
$config['csrf_exclude_uris'] = array( 'api/record/[0-9]+', 'api/title/[a-z]+');
class CI_Securityxss_clean($str[, $is_image = FALSE])
参数: | $ str(mixed) - 输入字符串或字符串数组 |
---|---|
返回: | XSS清理数据 |
返回类型: | 杂 |
$ str(mixed) - 输入字符串或字符串数组返回:XSS干净数据返回类型:混合尝试从输入数据中除去XSS漏洞并返回已清理的字符串。如果可选的第二个参数设置为true,如果图像可以安全使用,它将返回布尔值TRUE;如果检测到恶意数据,则返回FALSE。重要此方法不适用于过滤HTML属性值!html_escape()
改为使用。sanitize_filename($str[, $relative_path = FALSE])
参数:$ str(string) - 文件名/路径$ relative_path(bool) - 是否保留文件中的任何目录pathReturns:清理文件名/路径返回类型:字符串
$ str(string) - 文件名/路径
$ relative_path(bool) - 是否保留文件路径中的任何目录
Returns: Sanitized file name/path
Return type: string
Tries to sanitize filenames in order to prevent directory traversal attempts and other security threats, which is particularly useful for files that were supplied via user input.
$ filename = $ this-> security-> sanitize_filename($ this-> input-> post('filename'));
如果用户输入可以接受相对路径,例如file / in / some / approved / folder.txt,则可以将第二个可选参数设置$relative_path
为TRUE。
$ filename = $ this-> security-> sanitize_filename($ this-> input-> post('filename'),TRUE);
get_csrf_token_name()
返回: | CSRF令牌名称 |
---|---|
返回类型: | 串 |
get_csrf_hash()
返回: | CSRF哈希 |
---|---|
返回类型: | 串 |
entity_decode($str[, $charset = NULL])
参数: | $ str(string) - 输入字符串$ charset(string) - 输入字符串的字符集 |
---|---|
返回: | 实体解码的字符串 |
返回类型: | 串 |
$ str(string) - 输入字符串
$ charset(字符串) - 输入字符串的字符集
Returns: Entity-decoded string
Return type: string
This method acts a lot like PHP’s own native `html_entity_decode()` function in ENT\_COMPAT mode, only it tries to detect HTML entities that don’t end in a semicolon because some browsers allow that.
如果$charset
参数为空,则配置$config['charset']
价值将被使用。
get_random_bytes($length)
参数: | $ length(int) - 输出长度 |
---|---|
返回: | 随机字节的二进制流或失败时为FALSE |
返回类型: | 串 |
$ length(int) - 输出长度
Returns: A binary stream of random bytes or FALSE on failure
Return type: string
A convenience method for getting proper random bytes via `mcrypt_create_iv()`, `/dev/urandom` or `openssl_random_pseudo_bytes()` (in that order), if one of them is available.
用于生成CSRF和XSS令牌。
注
输出不一定是加密安全的,这是最好的尝试。