我写了一个插入我的数据库的函数。我有一个小疑问。
我的下面的代码是否提供了良好的安全性,可以在将数据提交到我的数据库之前将其转义?
如果下面的代码没有提供将数据插入数据库的好方法,请建议我解决此问题 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);
}
}
答案 0 :(得分:1)
您没有过滤用户输入,因此存在风险。无论如何,CodeIgniter
附带了一个Cross Site Scripting Hack预防过滤器,它可以自动运行以过滤遇到的所有POST和COOKIE数据,也可以基于每个项目运行它。默认情况下,它不会全局运行,因为它需要一些处理开销,因为在所有情况下您可能都不需要它。要通过XSS过滤器过滤数据,您可以使用security class
$data = $this->security->xss_clean($data);
如果您希望过滤器每次遇到POST或COOKIE数据时自动运行,您可以通过打开application / config / config.php文件并设置此
来启用它。$config['global_xss_filtering'] = TRUE;
如果您使用表单验证类,则可以使用form validation class的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
规则将检查输入是否为空,因此如果验证成功,则插入方法将起作用。