CodeIgniter 安全

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 注入:

  • 转义查询
  • 查询出价
  • 活动记录类

 

转义查询

   $username = $this--->input->post('username');
   $query = 'select * from subscribers_tbl where user_name = '.
      $this->db->escape($email);
   $this->db->query($query);
?>

$this->db->e​​scape() 函数自动在数据周围添加单引号并确定数据类型,以便它只能转义字符串数据。

 

查询竞价

   $sql = "select * from some_table where id = ? and status = ? and author = ?";
   $this--->db->query($sql, array(3, 'live', 'rick'));
?>

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

 

活动记录类

   $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;

 

错误日志

另一种方法是将错误传输到日志文件。因此,它不会显示给网站上的用户。只需在 application/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’ 在配置数组中进行设置来将来自 csrf 保护的 url 列入白名单,如下所示。您也可以使用正则表达式。

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

 

密码处理

许多开发人员不知道如何在 web 应用程序中处理密码,这可能就是为什么许多黑客发现入侵系统如此容易的原因。处理密码时应牢记以下几点:

  • 请勿以纯文本格式存储密码。
  • 始终对您的密码进行哈希处理。
  • 请勿使用 base64 或类似编码来存储密码。
  • 请勿使用弱或损坏的哈希算法,例如 md5 或 sha1、仅使用强密码散列算法,如 bcrypt,它用于 php 自己的密码散列函数。
  • 切勿以纯文本格式显示或发送密码。
  • 不要对用户的密码设置不必要的限制。
相关文章