在将数据提交到CodeIgniter中的数据库之前,逃避数据的最佳安全实践是什么?


what is the best security practice to escape my data before submitting it into my database in CodeIgniter

我已经写了一个函数插入到我的数据库。我有点怀疑。

是我下面的代码提供了良好的安全性,以逃避我的数据提交到我的数据库之前?

请建议我一些解决方案,如果下面的代码不提供插入数据到db的好方法views.php

 <? echo form_open('Setups/subject'); ?> 
                 <? echo '<div id="level">'. $subjectname.' : '.form_input($fsubjectname); ?>  
                 <?  echo form_submit($submitbtn); 
                  echo form_reset($resetbtn);  
                  echo '</fieldset>'; ?>
   <? echo form_close(); ?>    

controller.php

class Setups extends CI_Controller  {
function subject(){
    $this->load->helper('form'); 
    $this->load->model('Setupsmodel');
    if($this->input->post('subsubmit')){
        $this->Setupsmodel->entry_insert();
    }
    $data=$this->Setupsmodel->subjectsetup(); 
    $this->load->view('admin/setups/subject_setups',$data); 
  }
}

model.php

  class Setupsmodel extends CI_Model {
  function __construct()
{
    // Call the Model constructor
    parent::__construct();
}
function subjectsetup()
{
 $data['subjectname']='Enter Subject Name';  
 $data['fsubjectname']=      
  array('name'=>'subject_name','class'=>'input','size'=>30,'id'=>'txtsubject'); 
 $data['formtopic']='Subject Details Form';

 $data['submitbtn'] = array(
'name' => 'subsubmit',
'class' => 'button',
'value' => 'Submit',
'type' => 'submit',
'content' => 'Submit'
 );
  $data['resetbtn'] = array(
'name' => 'button',
 'class' => 'rsetbutton',
'value' => 'Reset',
'type' => 'reset',
'content' => 'Reset'
);
 return $data;   
}
//--------------Insertion of new record in the table subjectdetails into the db------------
function entry_insert(){
   $this->load->database();
   $data=array(
       'subject_name'=>$this->input->post('subject_name'));
$this->db->insert('subjectdetails',$data);
}   
} 

您没有过滤您的用户输入,所以这是有风险的。无论如何,CodeIgniter带有一个跨站点脚本攻击预防过滤器,它可以自动运行以过滤遇到的所有POST和COOKIE数据,或者您可以按项运行它。默认情况下,它不会全局运行,因为它需要一些处理开销,而且您可能不是在所有情况下都需要它。要通过XSS过滤器过滤数据,可以使用安全类

中的以下方法
$data = $this->security->xss_clean($data);

如果你想让过滤器在每次遇到POST或COOKIE数据时自动运行,你可以打开你的application/config/config.php文件并设置

$config['global_xss_filtering'] = TRUE;

如果你使用表单验证类,它也会给你XSS过滤的选项,使用表单验证类的set_rules方法。

$this->form_validation->set_rules('input_name', 'input label', 'xss_clean');

在这种情况下,你可以在控制器中使用

$this->form_validation->set_rules('subject_name', 'Subject Name', 'xss_clean|required');
if($this->form_validation->run())
{
    $this->Setupsmodel->entry_insert();
}

xss_clean规则将过滤输入,required规则将检查输入是否为空,所以如果验证成功,那么您的插入方法将工作。