0

データベースに挿入するための関数を作成しました。少し疑問があります。

以下のコードは、データベースに送信する前にデータをエスケープするための優れたセキュリティを提供しますか?

以下のコードがdbviews.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);
}   
} 
4

1 に答える 1

1

ユーザー入力をフィルタリングしていないため、危険です。とにかく、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空かどうかをチェックするため、検証が成功すると、挿入メソッドが機能します。

于 2013-01-13T08:37:59.997 に答える