ホームページ >バックエンド開発 >PHPチュートリアル >初心者がファジークエリによるSQLインジェクションを防ぐ方法を尋ねる

初心者がファジークエリによるSQLインジェクションを防ぐ方法を尋ねる

WBOY
WBOYオリジナル
2016-06-23 14:03:05945ブラウズ

//テーブルモデルを作成
$news_table=new news();
//対応するアダプターを作成
$db=$news_table->getAdapter();
//SQL文を準備
$sql=$db-> ;quoteInto ("select title,pubDate from news where title like '%$keyword_arr[0]%'");
//結果セットを取得します
$res=$db->query($sql)->fetchAll( ) ;
意図的に % 記号を含むファジー クエリが必要で、変数名 $ 記号と配列添字演算子 [] 記号も含まれていますが、他の人が % などを使用して SQL を挿入することも防ぎたいです。文を書けばいいですか? ?


ディスカッションへの返信 (解決策)

mysql_real_escape_string(); を追加します
ただし、mysql_real_escape_string は % と _ をエスケープしないため、最初に str_replace() を実行して不要なシンボルを削除できます。

この SQL 文を書くのを手伝ってもらえますか?
私は初心者です

この SQL 文は結果をクエリできますが、エラー ログ ファイルに 1 つのエラーと 1 つの警告が記録されます

PHP 警告: 引数 2 がありませんZend_Db_Adapter_Abstract::quoteInto() の場合、
44 行目の E:myenvApachehtdocsnewsapplicationcontrollersNewsqueryController.php で呼び出され、927 行目の E:myenvApachehtdocsnewslibraryZendDbAdapterAbstract.php で定義されています

PHP 注意: 未定義の変数:
E の値:myenvApachehtdocsnewslibraryZendDbAdapterAbstract.php
930 行目
問題がどこにあるのかわかりません

1. Abstract.php の 927 行目にある end_Db_Adapter_Abstract::quoteInto() 関数でパラメーター 2 が失われています。つまり、渡されたパラメーターが 1 つ少なくなります

2. PHP 通知: 未定義変数: value
$ value は Abstract.php 行 930 で定義されていません

%この注入を実現するにはどうすればよいですか?

私も知りたいのですが、パラメーターをフィルターし、フィルター対象の文字が見つかった場合は強制終了するか置換する必要があります。

mysql_real_escape_string


mysql_escape_string

の違いは何ですか? ?

$db-> quoteInto("select title,pubDate from news where title like '%$keyword_arr[0]%'");

quoteInto メソッドには 2 つのパラメータが必要です

#7
後者は含まれていますシリーズ

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。