0

$_GETメソッド呼び出し、SQL クエリ、およびファイル呼び出しで、$_POSTおよび変数を使用して$_COOKIEいます。セキュリティを強化するために、このユーザーデータをエスケープ/書き換える必要があります (インジェクション攻撃などを回避します)。これをどのように行うことをお勧めしますか?

組み込みのエスケープ機能からのいくつかのアイデア...ジュースを流すために:

  • にバックスラッシュを追加します:\x00, \n, \r, \, ', "および\x1a文字列を SQL クエリに対して安全にするために - mysql_real_escape_string() のように。
  • 受け入れられる文字数を[a-zA-Z0-9 _-\.](" \." はエスケープされた "."-ドット) に制限します。

ご意見をお待ちしております。ありがとう。

4

3 に答える 3

1

エスケープはデータを送信するシステムにも依存するため、システムごとに特別に作成された、PHP によって提供される関数を使用することをお勧めします。

例えば ​​:

  • MySQL クエリの場合は、、、、、mysql_real_escape_stringまたはmysqli_real_escape_stringを使用します。PDO::quote
    • または、準備済みステートメント ( mysqliPDO )を使用します。
    • 自分でバックスラッシュを追加しないでください: 適切で適切に機能する (そして十分にテストされた!) エスケープ関数が既に存在するのに、なぜそれを行うのでしょうか?
  • HTML 出力の場合は、htmlspecialcharsまたはhtmlentitiesを使用します。

いずれにせよ、車輪を再発明しないでください。

多くの種類の出力に対して既に存在するエスケープ関数/メソッドがあります: それらを使用してください!

于 2009-09-25T04:58:08.250 に答える
0

また、(ユーザーが入力した場合)エスケープする必要があるものは画像の場所などであることに注意してください

誰かがこれで画像(アバターなど)にホットリンクした場合

http://yoursite.com/admin/user/delete/1

そして、あなたのビューのコードは

<img class="avatar" alt="<?php echo $userName; ?>" src="<?php $avatarUrl; ?>" />

管理者としてログインしている場合、誤ってユーザーを削除してしまう可能性があります。もちろん、そのような削除が投稿で行われることを願っていますが、それでも回避することができます.

この場合、htmlspecialchars()役に立ちません。

すべてのデータ変更メソッドをポストに強制することで、攻撃者にとってより困難にすることができます。また、削除アクションごとにトークンを生成し、削除する前にそれを検証することで、ほぼ不可能にすることができます。

于 2009-09-25T05:56:00.037 に答える
0

私はこのように使用しています:

function escape($sql) {
    // Stripslashes
    if (get_magic_quotes_gpc()) {
        $sql = stripslashes($sql);
    }
    //if this is the intedger
    if (!is_int($sql) || $sql == '0') {
        $sql = "'" . mysql_real_escape_string($sql) . "'";
    }
    return $sql;
}

そしてMySQLクエリで

mysql_query("SELECT SQL_CACHE * FROM `page` WHERE `id` = ".escape($_GET['id'])." LIMIT 1");
于 2009-09-25T08:17:45.503 に答える