📜  CodeIgniter-安全

📅  最后修改于: 2020-10-26 05:37:09             🧑  作者: Mango


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提供了内置函数和库来防止这种情况。

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

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

转义查询

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

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

查询出价

db->query($sql, array(3, 'live', 'Rick'));
?>

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

活动记录类

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自己的密码哈希函数中使用。

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

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