1

これがURIです:example.com/index.php/products/shoes/sandals/123そしてこれが対応するコントローラーです:

<?php
class Products extends CI_Controller {

    public function shoes($sandals, $id)
    {
        $this->some_DB_using_Model->getListUsing($sandals,$id)
    }
}
?> 

$sandalsモデルに直接送信するのは安全ですか、それとも送信する前にフィルターを適用する必要がありますか。

編集:

function getListUsing($p1,$p2){
     $this->db->start_cache();
     $this->db->select('a');
     $this->db->select('b');
     $this->db->select('c');
     $this->db->where('p1',$p1);
     $this->db->where('p2',$p2);
     //then return the result
}
4

4 に答える 4

2

モデルが何をしているかによります。データベースクエリでそれを使用している場合は、はい、それをエスケープする必要があります。

CodeIgniterのアクティブなクエリを使用している場合は、データをエスケープします。

于 2012-04-24T16:21:16.310 に答える
1

config.phpファイルのURIセグメントで許可された文字などのURI変数にはいくつかの制限があり、コアには、悪意のある文字のURIをサニタイズする_filter_uri($ str)という名前の関数があり、引用符または二重を許可しない場合URIに引用符を付け、SQL変数のクリーンアップにCIデータベースドライバーを使用すると、システムに問題が発生することはありません。

例えば;

$this->db->query("update table set a=? where b=?",array($a_value,$b_value));

より安全です:

$this->db->query("update table set a='".$a_value."' where b='".$b_value."'");

ご存知かもしれませんが。

ここでの主な懸念事項は次のとおりです。

  1. ユーザーにいくつかの変数を表示したいかどうか、
  2. SEO関連の問題。
于 2012-04-24T16:25:41.813 に答える
0

私を昔ながらと呼んでください、しかし私はまだ私のSQLステートメントを書き出すのが好きです。そうは言っても、値が自動的にエスケープされるように、クエリバインディングを使用します。

于 2012-04-24T17:20:40.243 に答える
-3

スパークを使用することをお勧めします。すべてのデータをエスケープするためにすべてを実行します。ユーザー入力を決して信頼しないことを覚えておいてください。また、関数を使用してすべてのセグメントをエスケープすることもできます。すなわち

www.example.com/controllername/$item1/$item2

public function controllername ($item1,$item2)
{
  //sanitazi the data
   htmlentities($item1)
   htmlentities($item2)

//after this performed the call to your model by passing the new var or array 


}
于 2012-04-24T16:27:58.010 に答える