CodeIgniter - 安全性

XSS预防

XSS表示跨站点脚本. CodeIgniter附带XSS过滤安全性.此过滤器可以防止任何恶意JavaScript代码或任何其他试图劫持cookie并进行恶意活动的代码.要通过XSS过滤器过滤数据,请使用 xss_clean()方法,如下所示.

$data = $this->security->xss_clean($data);

只有在提交数据时才应使用此功能.可选的第二个布尔参数也可用于检查图像文件是否存在XSS攻击.这对文件上载工具很有用.如果其值为true,则表示图像是安全的,而不是其他.

SQL注入预防

SQL注入是对数据库查询的攻击.在PHP中,我们使用 mysql_real_escape_string()函数来防止这种情况以及其他技术,但CodeIgniter提供内置函数和库来防止这种情况.

我们可以阻止SQL在CodeIgniter中以下列三种方式注入 :

  • 转义查询

  • 查询Biding

  • 活动记录类

转义查询

<?php
   $username = $this->input->post('username');
   $query = 'SELECT * FROM subscribers_tbl WHERE user_name = '.
      $this->db->escape($email);
   $this->db->query($query);
?>

$ this-> db-> escape()函数自动在数据周围添加单引号并确定数据类型所以它只能转义字符串数据.

查询Biding

<?php
   $sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
   $this->db->query($sql, array(3, 'live', 'Rick'));
?>

在上面的例子中,问号(?)将被query()函数的第二个参数中的数组替换.以这种方式构建查询的主要优点是值会自动转义,从而产生安全查询. CodeIgniter引擎会自动为您完成,因此您无需记住它.

活动记录类

<?php
   $this->db->get_where('subscribers_tbl',array
      ('status'=> active','email' => 'info@arjun.net.in'));
?>

使用活动记录,每个数据库适配器都会生成查询语法.它还允许更安全的查询,因为值会自动转义.

隐藏PHP错误

在生产环境中,我们通常不希望显示任何错误给用户的消息.如果在开发环境中启用它以进行调试,那就很好.这些错误消息可能包含一些信息,出于安全原因,我们不应向网站用户显示这些信息.

有三个与错误相关的CodeIgniter文件.

PHP错误报告级别

不同的环境需要不同级别的错误报告.默认情况下,开发将显示错误,但测试和实时将隐藏它们.在CodeIgniter的根目录中有一个名为 index.php 的文件,用于此目的.如果我们将零作为参数传递给 error_reporting()函数,那么这将隐藏所有错误.

数据库错误

即使你关闭了PHP错误,MySQL错误仍然是开放的.您可以在 application/config/database.php 中将其关闭.将 $ db 数组中的 db_debug 选项设置为 FALSE ,如下所示.

$ db ['default'] ['db_debug'] = FALSE;

错误日志

另一种方法是将错误传输到日志文件.因此,它不会显示给网站上的用户.只需将 $ config 数组中的 log_threshold 值设置为 application/cofig/config.php 文件中的1,如下所示.

$ config ['log_threshold'] = 1;

CSRF预防

CSRF代表跨站点请求伪造.您可以通过在 application/config/config.php 文件中启用它来防止此攻击,如下所示.

 $ config ['csrf_protection'] = TRUE;

使用 form_open()函数创建表单时,它会自动将CSRF作为隐藏字段插入.您也可以使用 get_csrf_token_name() get_csrf_hash()函数手动添加CSRF. get_csrf_token_name()函数将返回CSRF的名称, get_csrf_hash()将返回CSRF的哈希值.

CSRF令牌可以在每次提交时重新生成,也可以在CSRF cookie的整个生命周期内保持一致.通过设置值 TRUE ,在配置数组中使用键'csrf_regenerate'将重新生成令牌,如下所示.

$ config ['csrf_regenerate'] = TRUE;

您还可以使用密钥'csrf_exclude_uris'在配置数组中设置来保护CSRF保护的URL,如下所示.你也可以使用正则表达式.

 $ config ['csrf_exclude_uris'] = array('api/person/add');

密码处理

许多开发人员不知道如何在Web应用程序中处理密码,这可能是众多黑客的原因发现它很容易打入系统.在处理密码和减号时应记住以下几点;

  • 请勿以纯文本格式存储密码./p>

  • 始终哈希密码.

  • 请勿使用Base64或类似编码存储密码.

  • 请勿使用弱或破坏的哈希算法,如MD5或SHA1.只使用像BCrypt这样的强密码哈希算法,它在PHP自己的密码哈希函数中使用.

  • 不要以纯文本格式显示或发送密码.

  • 不要对用户的密码设置不必要的限制.