3

クロス サイト スクリプティングに対して脆弱であると報告されている古いコードを使用しています。コード行は

document.write("<input type=hidden name=field1 value='" + getCookieValue('fieldval') + "' />");

このレポートでは、悪意のあるコードをページに挿入する方法について、次の例も示しています。Cookie 値を次のように更新することにより、

fieldval='><img src=x onerror=alert(1)>

この脆弱性を修正する方法について、誰か洞察を提供できますか?

4

2 に答える 2

2

getCookieValue からのデータを検証する必要があります。数値が必要な場合は、返される値が数値であることを確認してください。また、フィールドにエスケープ文字 (javascript から抜け出す引用符など) が含まれていないことを確認してください。これを修正すると、次のようになります。

function is_valid(value) {
     // Do some check here depending on what you're expecting.
     // I also recommend escaping any quotes (i.e. " becomes \")
     // Ideally, you'd just whitelist what is acceptable input (A-Z0-9 or whatever,
     // and return false from this function if something else is present in 
     // value!)
}

var cookie_value = getCookieValue('fieldval');

if(is_valid(cookie_value)) {
    document.write('<input type="hidden name="field1" value="' + cookie_value + '" />');
}

簡単に言えば、document.write を実行する前にデータをサニタイズするか、反映された XSS が発生するようにします。

上記のコメントで述べたように、ユーザー自身の Cookie (ユーザー自身が変更したもの) に由来する XSS は、特に心配する必要はありません。ただし、これにつながるコーディング慣行は、他の場所に存在する可能性があります。ソースを確認し、ユーザーからのすべての入力が信頼できないものとして扱われ、適切にサニタイズされるようにすることをお勧めします。

于 2013-02-07T19:27:11.900 に答える
2

あなたのコードには 2 つの誤りがあります。

  1. 信頼できないデータを正しくエンコードせずに出力に挿入します (これにより、反射型 XSS 攻撃の扉が開かれます)。
  2. プレーンな HTML を DOM に挿入するために使用document.writeします (これにより、DOM XSS 攻撃の扉が開かれます)。

車輪を再発明する前に、OWASPチートシートをチェックして間違いを修正する必要があります:

  1. OWASP XSS 防止チークシート - ルール 2
  2. OWASP DOM ベースの XSS 防止チート シート - ルール 2

ご覧のとおり、引用符をエスケープするだけでは問題は解決しません。信頼できないデータをホワイトリストに登録することは、常に推奨される方法であり、有効なアドバイスです。一般的な XSS についてさらに読むには、リンクに多くのリファレンスが含まれています。

于 2013-02-07T20:59:25.967 に答える