-1

以下のコードを試してみましたが、http リクエストがサーバーに送信される前に JavaScript が実行されているようです。

ありがとう

<?php

class secure
{
    function secureSuperGlobalGET(&$value, $key)
    {
        $_GET[$key] = htmlspecialchars(stripslashes($_GET[$key]));
        $_GET[$key] = str_ireplace("script", "blocked", $_GET[$key]);
        $_GET[$key] = mysql_escape_string($_GET[$key]);
        return $_GET[$key];
    }

    function secureSuperGlobalPOST(&$value, $key)
    {
        $_POST[$key] = htmlspecialchars(stripslashes($_POST[$key]));
        $_POST[$key] = str_ireplace("script", "blocked", $_POST[$key]);
        $_POST[$key] = mysql_escape_string($_POST[$key]);
        return $_POST[$key];
    }

    function secureGlobals()
    {
        echo "in here";
        array_walk($_GET, array($this, 'secureSuperGlobalGET'));
        array_walk($_POST, array($this, 'secureSuperGlobalPOST'));
    }
}

?>
4

2 に答える 2

0
  1. あなたのクラスを「安全」に取り除きます
  2. 引用符で囲まれた文字列としてSQL クエリに入る値にmysql_[real_]escape_string のみ使用します
  3. その他の SQL 部分は、その役割に従ってフォーマットする必要があります。
  4. 他の場所ではなく、クエリを組み立てる直前に SQL パーツをフォーマットします。
  5. または、これにプレースホルダーを使用することをお勧めします

最後に、質問に答えるには、ユーザーが送信した値をエコーアウトするときに htmlspecialchars() を使用します。

于 2013-02-26T09:07:20.843 に答える
0

コードがサーバーに戻る前に Javascript が実行された場合、これは何らかの形式の DOM ベースの XSS である可能性が高くなります。Javascript が の値を取得/"><script>alert(1)</script>して DOM に直接配置している可能性があります。これをクライアント側で処理する方法を変更する必要がある場合があります。

OWASP には、次のような DOM ベースのクロスサイト スクリプティング攻撃を防御する方法に関する素晴らしい概要があります: https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet

于 2013-02-28T03:27:29.810 に答える