安全类 | Security Class

安全等级

SecurityClass包含帮助您创建安全应用程序的方法,用于处理安全输入数据。

  • XSS滤波

  • 跨站点请求伪造%28CSRF%29

  • 类引用

XSS滤波

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()改为使用!

跨站请求伪造(CSRF)

您可以通过更改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 Coo​​kie的整个生命周期内保持不变。默认的令牌重新生成提供了更严格的安全性,但可能会导致其他令牌无效(后退/前进导航,多个选项卡/窗口,异步操作等)的可用性问题。您可以通过编辑以下配置参数来改变此行为

$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清理数据
返回类型:

  • $ strmixed) - 输入字符串或字符串数​​组返回:XSS干​​净数据返回类型:混合尝试从输入数据中除去XSS漏洞并返回已清理的字符串。如果可选的第二个参数设置为true,如果图像可以安全使用,它将返回布尔值TRUE;如果检测到恶意数据,则返回FALSE。重要此方法不适用于过滤HTML属性值!html_escape()改为使用。sanitize_filename($str[, $relative_path = FALSE])参数:$ str(string) - 文件名/路径$ relative_path(bool) - 是否保留文件中的任何目录pathReturns:清理文件名/路径返回类型:字符串

  • $ strstring) - 文件名/路径

  • $ relative_pathbool) - 是否保留文件路径中的任何目录

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) - 输入字符串的字符集
返回:实体解码的字符串
返回类型:

  • $ strstring) - 输入字符串

  • $ 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
返回类型:

  • $ lengthint) - 输出长度

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令牌。

输出不一定是加密安全的,这是最好的尝试。