sql >> データベース >  >> RDS >> Mysql

PHPの安全なユーザー変数

    深刻なセキュリティ問題を回避するためにあなたがしなければならない2つの非常に重要なことがあります。

    1. SQLクエリに入力する前に、ユーザー入力をエスケープする必要があります。エスケープとは、'などのすべての特殊文字をエスケープすることを意味します;幸いなことに、すでに自動的に実行する関数があります。 mysql_real_escape_string

      ユーザー入力をエスケープしないと、厄介なことが起こる可能性があります。クエリがINSERT INTO userdata VALUES ('$user_data')であると想像してください。 。ここで、ユーザーが'; DROP DATABASE userdata;

      エスケープしないと、クエリは次のようになります。INSERT INTO userdata VALUES (''; DROP DATABASE userdata;') 。ご想像のとおり、これは良くありません。複数のステートメントを有効にしている場合は、データベースに別れを告げることができます。これはSQLインジェクションと呼ばれます 攻撃。

    2. 変数をユーザーに出力するときは、HTMLの特殊文字をHTMLエンティティに適切に置き換える必要もあります。幸いにも、それを行う関数があります: htmlspecialchars()<などの特殊なHTML文字を変換します &lt;へ 。

      これはしばしば過小評価されている問題のようですが、実際には非常に深刻です。 $user_dataの場合を想像してみてください <script>SomeNastyScript()</script>が含まれています 。ユーザーのブラウザに存在する脆弱性を悪用したり、HTTPOnly以外のCookie(保存されたパスワードを含む可能性があります)を攻撃者に送信したり、ユーザーをだまして、 DOM(javascriptで可能)、または他の多くの悪いこと。

      これはXSSと呼ばれます (クロスサイトスクリプティング)。

    ショートバージョン

    1. mysql_real_escape_stringを呼び出します SQLクエリに挿入する前に文字列を変更します(ただし、echoを実行する場合は変更しません)

    2. htmlspecialcharsを呼び出す 文字列をユーザーに表示する前に(ただし、データベースに配置するときはそうではありません)。



    1. この休止状態のテンプレートbulkUpdateが機能しない理由

    2. PDOステートメントでの列名のエスケープ

    3. SQLServerでSELECTからUPDATEを使用する方法

    4. MariaDBでのQUARTER()のしくみ