2011-01-17 17 views
2

私はウェブサイトを持っています.1ページに、ユーザーのコンピュータからクッキーを読み込み、それをPHPコード内の変数として使用します(エコー文など)。PHPのクッキー注入の脆弱性?

現在、どのような方法でもクッキングをクリーニングしていません。

2質問:

  1. 誰かが私のPHPコードにものを置くために彼らのクッキーをハックすることができますか?

  2. はいの場合、どうすればこの問題を防ぐことができますか?どうすれば清掃できますか?

ありがとう!

+3

クッキーの使用方法に関するいくつかのコードを表示します。 – Brad

+1

クッキーを信頼しないでください。それらは編集が非常に簡単です。それらのコンテンツを使用する前に、必ず内容を検証してください。 –

答えて

2

はい、コードでの使用方法によっては、これを非常に簡単に悪用できます。たとえば、リクエスト全体を偽造し、クッキーに任意の値を指定することができます。

これを防止する方法の問題は、クッキーにどの値が含まれているかによって異なります。あなたがする必要があるのは、クッキーの価値があなたの仕様に合っていることを確認することだけです。この仕様が何であるか、あるいはその価値がどのように使われているかを知らなければ、それ以上のことは言えません。

6

はい、クライアントでCookieを編集するのは非常に簡単です。他のユーザーが生成した入力として、Cookieの値を処理する必要があります。信頼できず、検証しないでください。

+3

ブラウザから来るものは、GETS、POSTS、Cookieなどのものであれば誰でも問題ありません。すべて操作できます。それをデータベースクエリで使用する場合は、*特に*チェックしてください。 –

+1

+1。これらの行に沿って、あなたはクッキーの値を暗号化し、必要なときにそれらを解読するだけです。 http://stackoverflow.com/questions/606179/what-encryption-algorithm-is-best-for-encrypting-cookies – NotMe

3

Cookieがechoingの場合は、ユーザーが爆発する可能性のある脆弱性を「XSS」といい、Cross Site Scriptingを表します。基本的に彼は<script>タグをウェブサイトに挿入してjavascriptを実行します。

これを防ぐには、PHPのstrip_tags関数を使用してクッキーからタグを削除します。

他の方法でクッキーを使用する場合は、新しいセキュリティ問題がある可能性があります。そのような場合に指定してください。

+0

ユーザーが自分自身に対してクロスサイトスクリプティング攻撃を実行するのを参照してください。どのようにこれは正確に動作するのでしょうか? – aaronasterling

+3

さて、私はあなたのラップトップを貸して、私はFacebookに入ることができます、私はあなたのクッキーを編集することを考えてみましょう、それはすべてそこにあります。 – amosrivera

+0

よろしくお願いします。私はそれについて考えなかった。 – aaronasterling

0

人々がクッキーを投稿したので、クライアント側で操作が簡単です。基本的にテキストファイルです。エコーして、dbコールのクッキー内のデータに依存しない場合、関数呼び出しまたはファイルには、ローカルマシン上のdisplaydにのみ影響を及ぼすため、ユーザは気にする必要はありません。公共のコンピュータでは、これはやっかいなことには問題があるかもしれません。 サーバー側のセッションを使用して、より多くの制御データを処理したい場合。または、実際にクッキー内のデータが必要な場合は、クッキー値serversideのハッシュを保存して、バーンが改ざんされているかどうかを判断することができます。

1

Strip_tagsはあなたのハッキングを防ぎません。それはHTMLだけを取り除き、サイトをXSSするためにHTMLを必要としません。

+0

これは本当です。例えば、strip_tagsが特定のタグを許可している場合、クリックジャッキは簡単に実行できます。これは、属性が削除されないためです。 –

0

問題は入力そのものではなく、出力方法にあります。 echoを直接HTMLページに挿入する場合は、HTMLエンコードする必要があります。 すべての文字列であり、クッキーだけでなくHTMLページにも含まれます。あなたがエスケープされていない文字列をHTMLに出力する習慣であれば、これはXSSバグをこの(*)よりもはるかに容易に利用できます。

可変テキストをHTMLに出力するために適切に処理する方法は、すべての変数をhtmlspecialchars()にラップすることです(入力処理ステップではなく)。strip_tags()を使用しないでください - セキュリティ対策として設計されておらず、さまざまな状況で失敗します。限られたユーザ入力マークアップを受け入れる必要がある場合は、HTML浄化ライブラリを使用します。

(*:CookieからのHTMLインジェクションがどのように悪用されるかは、そのCookieの設定方法に大きく依存します。 HTMLインジェクションを悪用するためには、あなたのアプリのヘッダインジェクションのバグや、「ネイバードメイン」の脆弱なアプリケーションである可能性があります。 a.example.comのアプリケーションでは、アプリケーションによって読み取られるクッキーをb.example.comに設定できます。