2012-01-06 24 views
3

私はどこからでも検索し、これに対する解決策を見つけました。私は最近、XSSとSQL Injectionに対する脆弱性を見つけるために、私たちのWebサイト上でスキャンを実行しています。いくつかのアイテムが私の注目を集めました。XSS PHPスクリプトの脆弱性

ユーザーが入力したデータは、filter_var()を使用して検証され、サニタイズされます。

私の問題は、XSSとその人がURLを操作していることです。どこにでもあるように思わ単純なものがある:

http://www.domainname.com/script.php/">< script>alert('xss');</script> 

これは、その後$_SERVER変数の一部を変更し、CSS、リンク、画像などに私の相対パスのすべての原因となる。..無効であると、ページが」doesnの正しくロードしてください。

スクリプト内で使用されている変数はすべて削除しますが、この不要なデータをURLから取り除く方法についてはわかりません。

ありがとうございます。

追加: これは、テンプレート・ファイル内の単純なリンク原因:実際にリンクする

<a href="anotherpage.php">Link</a> 

を:

"http://www.domainname.com/script.php/" > <スクリプト>アラート( 'xss'); < /スクリプト> /anotherpage.php

+0

ユーザ入力をサニタイズします。 – Adrian

+0

正確にはどのように私は消毒していますか、私はこの入力を何らかの用途のために取っていません。私はそれが私が欲しい変数でなければ無視したいだけです。 – cosmoba

答えて

0

XSSについての懸念事項:関連する$ _SERVER変数を盲目的に使用しない限り、変更されたURLはページに入りません。相対リンクにURLが挿入されたスクリプトが含まれているように見えるという事実は、相対リンクを壊すだけの危険性があるブラウザの動作です。あなたは$ _SERVER変数を使って目がくらむことはないので、心配する必要はありません。

相対パスの破損に関する懸念:相対パスは使用しないでください。すべてのリソースを少なくともルートドメイン(スラッシュで始まる)のパスで参照してください。このようなURLの破損によって、記述した方法でサイトが破壊されることはありません。

2

これは、その後$_SERVER変数の一部を変更し、CSS、リンク、画像などに私の相対パスのすべての原因となる。..無効であると、ページが正しくロードされません。 。

これはあなたのウェブサイトで大きな間違いを犯したと思います。入力から出力へのリンク情報の注入方法を再考する必要があります。

フィルタリング入力だけでは役に立ちません。出力もフィルタリングする必要があります。

多くの場合、アプリケーションが404エラーを返す許可された要求のスーパーセットと一致しない要求を受け取ると、より簡単です。

URLでこの不要なデータをどのように取り除くかについてはわかりません。

実際にはリクエストが送信されているため、URLが設定されています。あなたはそれを "変更"することはできません。これは、要求された情報だけです。

これ以上対処しないでください。 (あなたのリンクが壊れています)。


編集:あなたは今、あなたが心配何より具体的に書いています。私はここにdqhendricksで行くだろう:誰が気に?

あなたが本当にユーザーがちょうど彼女のブラウザを使用して、彼女がそうすること自由に感じている任意のURLを入力しているという事実と不快に感じる場合は、まあ、技術的に正しい応答は次のとおりです。

400不正な要求(ref

とNOのみ完全修飾のURI(絶対のURI)またはベース-URIの再定義でページを返さないそれ以外のブラウザではURIがかかります基地としてのアドレスバーに入力されました-URIUniform Resource Identifier (URI): Generic Syntax RFC 3986; Section 5. Reference Resolution­Specsを参照してください。

+0

私は自分の出力に実際に入力を使用しません。私はPHP_SELF、または$ _SERVER変数のどれも使用しません。私のサーバー構成に欠けているものがない限り。呼び出されているスクリプトは存在するので、404エラーをどのようにして返すべきかについて私は確信しています。リンクがどのように変更されているかを表示するために質問を修正しました。 – cosmoba

+0

@cosmoba:答えを編集しました。スクリプトでHTTPステータスコードを返す方法については、http://php.net/headerを参照してください。 – hakre

1

最初に、誰かがそのURLにそのくそを追加すると、ページに画像が正しく読み込まれないと気になるのは誰ですか?リクエストが有効でない場合は、なぜページをロードするのですか?とにかく、SERVER varsを使ってパスを取得するのはなぜですか?

2番目の場合、SQLインジェクションを避けるために、特定のデータベースに対して適切な方法でユーザー入力のデータベース入力をエスケープする必要があります。 filter_varは一般的に役に立ちません。

3番目に、xssは簡単に保護できます。任意のページに表示されるすべてのユーザー投稿データは、htmlspecialchars()でエスケープする必要があります。このエスケープ・インを構築できるビュー・クラスを使用すると、これは確実に簡単になります。

+0

パスを取得するために$ _SERVER varsを使用していません。私はすべてのユーザーが提出したデータをエスケープします。 – cosmoba

+0

@cosmobaあなたのポストで言ったように、 "これは$ _SERVER変数のいくつかを変更し、CSS、リンク、画像などへの相対パスをすべて無効にし、ページが正しく読み込まれなくなります。 $ _SERVER varsは相対パスには何も影響しません。 – dqhendricks