重複の可能性:
究極のクリーン/セキュア機能
コーディングのいくつかでいくつかの問題に遭遇しました。スクリプトで sql インジェクションの可能性を不本意ながら発見しましたが、問題を解決できないようです。
スクリプトのコーディングは問題なくできていると言えますか。データベース インジェクションがどのように発生するのか、どのように機能するのか、どのように防止するのかまったくわかりませんが、クリーニング機能が意図したとおりに機能しないことは明らかです。
問題のあるコードのチャンクは次のとおりです。id の後に次を追加すると、MySQL エラーが吐き出されます。これは、私のコードが脆弱であることを意味することについてよく読んでいます。
&id=369';
そのため、コンマとセミコロンを追加するだけで MySQL クエリが壊れてしまい、望ましくありません。クエリを処理してデータを表示するコードは次のとおりです。
$id = $this->clean($_GET['id']);
#$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_STRING);
$pm_query = mysql_query("SELECT * FROM `staff_pm` WHERE `id` = '{$id}' AND `status` IN(0, 1)") or die(''.mysql_error());
だから私はPHP内の統合関数の1つを試しましたが、それは同じSQLエラーを吐き出します.これは私が事前に言われた私のクリーニング関数です:
function clean( $str )
{
return mysql_real_escape_string( htmlspecialchars( trim( $str ) ) );
}
この問題に関するあなたの意見を本当に知りたかったのですが、私のコーディングがこの種の脆弱性を探している人に利用されるのではないかと常に心配しています.それをよりよく保護するためのいくつかのテクニック。
PDO に変換するように言われましたが、変換するのは大変な作業のように思えます。その前に、アプリケーションを再作成するまで待ってから、よりオブジェクト指向のアプローチに移行します。
私が受け取るSQLエラーはこれです:
SQL 構文にエラーがあります。「\」の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。1 行目のAND
status
IN(0, 1)'
助けてくれてありがとう、本当に感謝しています。
よろしく