thinkphp フィルター xss

步履不停
リリース: 2019-08-16 18:11:23
オリジナル
5006 人が閲覧しました

thinkphp フィルター xss

XSS とは: 平たく言えば、SQL インジェクションと同様に、XSS 攻撃も HTML および JS のインジェクションとみなすことができます。あなたは当初、ユーザーから有用なテキストを取得したいと考えていましたが、ユーザーが送信したものは、不純な動機を持つ実行可能な JavaScript またはその他のスクリプトでした (ここでは、スタイルやドキュメント テキストの破壊は攻撃とみなされません)。送信されたコンテンツがページに表示されると、XSS 攻撃が発生します。

XSS に関する攻撃手法やシナリオは無限に存在します。この記事は、セキュリティ保護に関する基本的な知識を広めることを目的としています (フラッシュ スクリプト攻撃は含まれません)。この攻撃手法を徹底的に学習したい場合は、次のリンクを参照してください。お勧めの本です。<> を読む時間がない場合は、この記事だけ読んでください。

この記事では、Cookie、セッションの動作原理、TP フレームワークについての一定の理解といった基本的な知識が必要です。

1: 攻撃手法の 99% に耐性があり、シナリオの 90% に適用可能です。

Web サイトに複雑なユーザー操作が含まれていない場合、ユーザーが送信したすべての情報は、テキストは htmlspecialchars 関数によって処理されます。

THINKPHP3.2 バージョンの手順は次のとおりです。

1:

プロジェクト構成ファイルに構成 を追加します。 'DEFAULT_FILTER' => ; 'htmlspecialchars', //デフォルトのフィルター関数

2:

フレームの I メソッドを使用して、ユーザーによって送信されたデータを取得します;

例: M('Member ' )->save(array('content'=>I('post.content')));この方法で追加されたコンテンツは、htmlspecialchars によって処理されました。

質問: なぜ処理されるのですかby htmlspecialchars テキストの安全性は保証できますか?

回答: さまざまな XSS 攻撃方法を見ると、そのほとんどは、コンテンツを挿入するために 1 つ以上の文字 <>'"& に依存しています。htmlspecialchars 関数の機能は、これらの文字を無害な HTML エンティティに変換することです。 ;

質問: なぜこれほど良い方法があるのに、非常に多くの Web サイトが依然として攻撃されているのですか。

答え: 多くのプログラマがこの方法を不用意に使用することを常に忘れているためです。また、フィルタリングを省略しているためです。

2: IP を COOKIE にバインドする

Cookie の内容がすべて暗号化されています。XSS 攻撃を通じて Cookie 情報が他人に取得されると、自分のアカウントのパスワードを他人に渡しているのと同じになります。

Cookie の IP をバインドします (もちろん、ユーザーの顧客情報も取得できます)。同時に末端の他の情報もバインド可能) ユーザーの IP に基づいて、この Cookie が本来の許可されたユーザーからのものであるかどうかを判断できます。

# ユーザーが自動ログインを設定すると、自動ログイン情報が保存されます:

  1. $auto=I(&#39;post.auto&#39;);//用户设置了自动登录
    if(!empty($auto)){
    cookie(&#39;auto&#39;,encrypt(serialize($data)));//将登录信息保存到cookie,其中$data里含有加密后的帐号,密码,和用户的IP,这里的cookie已在全局中设置过期日期为一周
    }
    ログイン後にコピー

  2. ユーザーが自動ログインを設定すると、自動ログイン情報が保存されます。ブラウザを閉じて再度 Web サイトにアクセスすると、自動ログイン情報が保存されます。 : ほとんどのシナリオでは、XSS 攻撃によって盗まれた Cookie は無効になる可能性があります 欠点 : IP が複数のコンピューターで共有される可能性があるため、バインディングをあまり正確に行うことはできません
  3. 3: httponly 構成を追加しますCOOKIE の場合


  4. thinkphp の最新バージョンはすでにこのパラメータをサポートしています。
#このパラメータにより、Cookie が次の形式でのみ送信されるようになります。 http リクエストであり、ページ内のスクリプトによって取得されるものではありません。現在、市場で入手可能です。ほとんどのブラウザはすでにサポートしています。

4: 注目に値する HTML5 の新機能:

  1. ##