1

いくつかの異なるデータベース フィールドを調べて、適切な検索結果を返す MySQL クエリを作成しようとしています。たとえば、ユーザーが「plumber leeds」を検索した場合、ビジネスの「都市」フィールドに「leeds」があり、名前の一部に「plumber」という単語が含まれている場合、その検索結果が返されるようにします。

ユーザー検索には複数の単語が含まれる可能性があり、予測できません。私は現在、検索用語を爆発させ、トリミングし、それを使用して複雑な検索クエリをコンパイルし、関連するすべての結果を返すことで、必要なことを達成しています。

この複雑なクエリを変数に格納し、Codeigniter の Active Record を使用してクエリを実行しています。

$this->db->where($compiled_query, null, false);

私が懸念しているのは、クエリをバッククォートで保護していないことです。これがセキュリティ上の問題であるかどうかはわかりません。XSS Clean を有効にしていますが、これで問題ないかどうかはまだわかりません。

CI のユーザー マニュアルによると: $this->db->where() は、オプションの 3 番目のパラメーターを受け入れます。FALSE に設定すると、CodeIgniter はフィールドまたはテーブル名をバッククォートで保護しようとしません。

ソース: http://ellislab.com/codeigniter/user-guide/database/active_record.html

別の質問で、ここでクエリをコンパイルする方法に関する情報。mysql_real_escape_string が非推奨になりつつあり、キャッチオールではないことは承知しているため、この方法に関する私の懸念の一部です。

https://stackoverflow.com/questions/13321642/codeigniter-active-record-sql-query-of-multiple-words-vs-multiple-database-fi

どんな助けでも大歓迎

4

2 に答える 2

3

バックティックはセキュリティとは何の関係もありません。これらは実際にはフィールドとテーブル名を「文字列化」する方法にすぎdatatypeないため、たとえばと呼ばれるフィールドを使用でき、mysql キーワードと競合することはありません。

あなたは安全です

于 2013-02-03T22:56:17.827 に答える
1

SQLクエリでユーザー入力を受け入れる場合、技術的に安全であるとは決して言えないため、絶対に「安全」であるとは言えません(操作したとしても...意志があれば方法があります)。

アプリケーションに与えられたものに対する制御を放棄したら、インジェクション攻撃にさらされないように、そのデータの取り扱いには細心の注意を払う必要があります。

XSS Clean は、データの Cookie を処理するのに役立ちます。変数POSTに対しては自動的に実行されません。配列からの入力である場合は、GET手動で実行します。$data = $this->security->xss_clean($data);GET

于 2013-02-04T01:28:09.107 に答える