1

重複の可能性:
究極のクリーン/セキュア機能

PHP のセキュリティについて読んだ後、私がコーディングしたものは常に安全ではないと感じています。そのため、ユーザー入力のセキュリティ問題に対処するために、あらゆる使用状況でユーザー入力をエスケープおよび削除できる関数を作成しました。

これが実際に安全かどうか、さらに安全にできるかどうかを知りたいだけです。また、これはどのような種類の攻撃を防ぎますか? _GET を使用して XSS に伝えることができることから、HTML 入力と MYSQL インジェクションは防止されたでしょうか?

function _INPUT($name,$tag,$sql,$url)
{
if ($_SERVER['REQUEST_METHOD'] == 'GET')
    $filter = ($_GET[$name]);//Assign GET to filter variable

    if ($tag == true)//Remove all HTML, PHP and JAVASCRIPT tags
    {
        $filter = strip_tags($filter);
    }
    if ($sql == true)//If MYSQL escaping is enabled
    {
        $filter = mysql_real_escape_string($filter);
    }
    if ($url == true)//If URL encoding is enabled
    {
        $filter = urlencode($filter);
    }
    return $filter;     

}

$output = _INPUT('name',true,true,true);

インジェクションを防ぐ方法を完全に理解するには、さらに詳しく読む必要がありますが、MYSQL にもプリペアド ステートメントを使用します。

お時間をいただきありがとうございます。

4

3 に答える 3

5

繰り返しますが、物事を魔法のように「安全」にする普遍的なエスケープ機能はありません。

これを参照してください: https://stackoverflow.com/a/7810880/362536

さまざまなことにさまざまなエスケープ方法が使用されます。特定のコンテキストで使用されるはずの一連の関数を使用して、一連のデータを実行することはできません。あなたはガベージデータを作成しており、そもそも生のユーザーデータを使用していたときよりも安全ではありません.

于 2012-06-12T19:56:38.927 に答える
2

いいえ、

SQL インジェクションを防止するには、準備済みステートメントを使用する必要があります。これは、引用符をエスケープする代わりに、これを行うより安全な方法です。また、HTML タグを単に取り除くのではなく、エスケープするためにhtmlspecialchars()を使用することもできますが、それはあなた次第です。

于 2012-06-12T19:56:59.203 に答える
1

これは一種の永遠の質問であり、その答えは使用方法によって異なります。準備されたクエリの場合、独自の変数システムを使用して入力を処理させるのが 100% 安全だと思います。HTML 出力の場合、タグの削除が常に望ましいとは限りません。さらに、ハッカーには空想があるので、ブラックリストよりも入力を許可するホワイトリストを作成する方が安全です。URL 出力の場合、ソリューションは問題ないはずですが、他のプラットフォームでは URL エンコードが少し異なる場合があることに注意してください (Java 標準ライブラリと iOS/Mac ライブラリで URL エンコードされた文字列の違いを参照してください)。

于 2012-06-12T20:00:30.123 に答える