好的,所以我注意到了codeigniter" form_validation"库允许使用回调,这很好但是它们是一个条件,该方法必须被公开。
每个使用过codeigniter的人都会知道控制器中的公共方法可以从外部访问,我甚至试图查看codeigniter是否有一些代码来阻止你调用回调方法而且它没有。
这有多大的安全隐患,因为我不会觉得如此安全。
谢谢, 丹
答案 0 :(得分:0)
我个人认为这不安全。我总是要做的就是让表单也发送一些额外的值,例如你可以验证的CSRF令牌,以及当你进入主验证函数时创建的另一个唯一值,你可以在回调函数中验证它。
答案 1 :(得分:0)
您可以随时使用MY_Form_validation.php
库并在偏执狂后使用自定义验证方法。
<?php if ( ! defined( 'BASEPATH' ) ) exit( 'Not your cup of tea.' );
class MY_Form_validation extends CI_Form_validation
{
public function __construct()
{
parent::__construct();
}
public function noone_can_see($str)
{
if ( (string)$str !== (string)strrev($str) )
{
return FALSE;
}
else
{
return TRUE;
}
}
}
在控制器中:
$this->form_validation->set_rules('username', 'Username', 'trim|required|noone_can_see', ['noone_can_see' => 'We still can not read the %s identically from both ways.']);
加载库未更改。仍然可以在autoload.php
中,库数组的值为'form_validation'
。
答案 2 :(得分:-1)
我也有同样的想法,我尝试从Web浏览器的HTTP请求中成功调用回调函数。
我非常安全,特别是因为我的回调使用输入数据执行模型查询。
您可以做的一件事是改用callable或阻止对回调函数的访问:
How to disable direct access to callback functions?