2016-12-01 8 views
0

おはよう、 私は自分のフォームでPrestaShopを検証しています。 間違いが反映されています。PrestaShop Validator:SQLセキュリティの問題

モジュールにセキュリティの問題があります。 - 挿入時にデータが常に保護されていることを確認してください。たとえば、 明示的(int)キャストの整数を持っていることを確認してください。このテキストは、pSQL()メソッドのおかげで、SQLインジェクション によって保護されています。 - 注意してください(文字列)は保護されたキャストではありません.pSQLする必要があります。次のように

私が使用してINSERTクエリは、次のとおりです。

Db::getInstance()->execute('INSERT IGNORE INTO '._DB_PREFIX_.'ff_list_filter (name, content) VALUES ("'.$t['filter_template_name'].'","'. str_replace('"', '\"', serialize($t)).'")'); 

または

Db::getInstance()->execute('INSERT IGNORE INTO `'._DB_PREFIX_.'ff_people` (`field`,`list`) VALUES ("'.$c->email.'",'.$listId.')'); 

または

Db::getInstance()->execute('INSERT IGNORE INTO '._DB_PREFIX_.'ff_custom_field (field, list) VALUES ("'.$field.'"," ","'.$list.'")'); 

あなたは今までそのようなものを見たことがありますか?

+0

あなたは値をエスケープしていませんが、SQLインジェクションを使用してモジュールを配布したくないのですか? – TheDrot

答えて

4

Prestashop Addons検証プロセスは非常に絶妙です。このエラーは、使用しているすべての外部パラメータをSQL文にキャストする必要があることを意味します。このようにする必要があります:

Db::getInstance()->execute('INSERT IGNORE INTO '._DB_PREFIX_.'ff_list_filter (name, content) VALUES ("'. (int) $t['id_int'].'","'. pSQL(str_replace('"', '\"', serialize($t))).'")'); 

追加提案:あなたがタイプとのparamsを持っている場合は

Db::getInstance()->execute('INSERT IGNORE INTO '._DB_PREFIX_.'ff_list_filter (name, content) VALUES ("'. pSQL($t['filter_template_name']).'","'. pSQL(str_replace('"', '\"', serialize($t))).'")'); 

する文字列以外では、対応する型に直接キャストしなければなりません。 PrestashopのDBクラスを使用して、挿入、更新、および削除の文章を作成することができます。こうすることで、簡単な引用符の誤りなどを避けることができます。

Db::getInstance()->insert('ff_list_filter', array('name' => pSQL($t['filter_template_name']), 'content' => pSQL(str_replace('"', '\"', serialize($t))))); 

幸運です。

+0

ありがとう –