現在、私が知っている SQL 攻撃は、「%」などの特殊文字を多数入力することによって実装されています。ログイン インターフェイス SQL 攻撃、
// 适用各个 PHP 版本的用法if (get_magic_quotes_gpc()) { $lastname = stripslashes($_POST['lastname']);}else { $lastname = $_POST['lastname'];}// 如果使用 MySQL$lastname = mysql_real_escape_string($lastname);echo $lastname; // O\'reilly$sql = "INSERT INTO lastnames (lastname) VALUES ('$lastname')";
// 适用各个 PHP 版本的用法if (get_magic_quotes_gpc()) { $lastname = stripslashes($_POST['lastname']);}else { $lastname = $_POST['lastname'];}// 如果使用 MySQL$lastname = mysql_real_escape_string($lastname);echo $lastname; // O\'reilly$sql = "INSERT INTO lastnames (lastname) VALUES ('$lastname')";
これは実際の開発で使いやすいですか?
使いやすいかどうかは使ってみないと分かりません。
使いやすいかどうかは使ってみないと分かりません。
上記の記述方法について 2 つの質問をしたいのですが:
1. magic_quotes_gpc をオンにすると、特殊文字を含む SQL が正常に mysql に追加され、取得するために addslashes() が必要なくなるようです。システムがすでに処理しているように見えるため、現時点ではstripslashes()は必要ありません。これは本当ですか?
if (get_magic_quotes_gpc()) { //如果 magic_quotes_gpc开启了,则会影响 post、get、cookie 请求的数据,单/双引号、反斜杠会在前面自动加上反斜杠,因此要先用stripslashes去掉反斜杠以免出现双重转义 $lastname = stripslashes($_POST['lastname']);}else { //否则取原数据 $lastname = $_POST['lastname'];}
if (get_magic_quotes_gpc()) { //如果 magic_quotes_gpc开启了,则会影响 post、get、cookie 请求的数据,单/双引号、反斜杠会在前面自动加上反斜杠,因此要先用stripslashes去掉反斜杠以免出现双重转义 $lastname = stripslashes($_POST['lastname']);}else { //否则取原数据 $lastname = $_POST['lastname'];}
よろしくお願いします。これには 2 つの意味があることがわかりました:
1. mysql で特殊文字を正常に実行できるかどうかは、エスケープに関係します。
2. mysqlで実行することは可能ですが、mysqlがインジェクションを実行するために悪意のある特殊文字が表示されます。
mysql インジェクションの場合、mysql は一部の特殊文字を認識して実行できるはずですが、悪意のある実行結果が発生していますよね。
magic_quotes_gpc スイッチ
php 5.4 ではキャンセルされました
get_magic_quotes_gpc() の戻り値を判断するのは古いことです
SQL ステートメントが標準化された方法で記述されている限り、何もありません問題。たとえば、文字列連結を使用する代わりに、置換を使用します。引用符を正しく使用してください。 PDOを使用します。