CodeIgniter安全


XSS预防

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

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

只有在您提交数据时才应使用此功能。可选的第二个布尔参数也可用于检查图像文件是否存在XSS攻击。这对文件上传功能很有用。如果它的值是真的,意味着图像是安全的而不是其他。

SQL注入预防

SQL注入是对数据库查询进行的攻击。在PHP中,我们使用 mysql_real_escape_string() 函数与其他技术一起防止出现这种情况,但CodeIgniter提供了内置函数和库以防止出现这种情况。

我们可以通过以下三种方式防止CodeIgniter中的SQL注入 -

  • 转义查询
  • 查询招标
  • 活动记录类

转义查询

<?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() 函数自动为数据添加单引号并确定数据类型,以便它只能转义字符串数据。

查询招标

<?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 的文件,用于此目的。如果我们将0作为参数传递给 error_reporting() 函数,那么它将隐藏所有的错误。

数据库错误

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

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

错误日志

另一种方法是将错误传输到日志文件。所以,它不会显示给网站上的用户。只需将 application config / cofig / config.php 文件中的 $ config 数组中的 log_threshold 值设置为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' 将其设置在config数组中,将CSRF保护的URL列入白名单,如下所示。你也可以使用正则表达式。

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

密码处理

许多开发人员不知道如何在Web应用程序中处理密码,这可能是众多黑客发现进入系统非常容易的原因。在处理密码时应该注意以下几点 -

  • 不要以纯文本格式存储密码。

  • 始终哈希你的密码。

  • 不要使用Base64或类似的编码来存储密码。

  • 不要使用像MD5或SHA1这样的弱散列算法。只能使用强密码散列算法,如用于PHP自己的密码散列函数的BCrypt。

  • 切勿以纯文本格式显示或发送密码。

  • 不要对用户的密码进行不必要的限制。