ビルド“終了”クロスサイトスクリプティングの大きな落とし穴を回避するクラシックASPを使用したページ
-
04-07-2019 - |
質問
勤務先の会社で管理されている多くのサブサイトで使用されている従来のASP Webページの更新に取り組んでいます。
ページの目的は、ユーザーに「私たちの」を離れることを通知することです。別のサイトに移動します。基本的に免責事項ですが、リソースの制限と時間の制限のため、管理するすべてのサイトに免責事項を追加することはできません。
これは問題の核心です。現在のコードは、クエリ文字列から変数を取得して、「続行」を作成します。新しいウィンドウにリンクします。これは明らかに、クロスサイトスクリプティングという形で多くの問題を引き起こします。
vbScript / ASPを使用して、クロスサイトスクリプティングの問題のほとんど(すべてではないにしても)を排除するために、この更新プログラムにどのように取り組みますか。
使用しているコードは次のとおりです。
<%@ Language = vbScript %>
<% Option Explicit %>
<%
Dim strLink
strLink = Request.QueryString("site")
strLink = Replace(strLink, "<", "<")
strLink = Replace(strLink, ">", ">")
strLink = Replace(strLink, chr(34), "")
strLink = Replace(strLink, "script", "", 1, -1, 1)
strLink = Replace(strLink, "onclick", "", 1, -1, 1)
strLink = Replace(strLink, "ondblclick", "", 1, -1, 1)
strLink = Replace(strLink, "onmousedown", "", 1, -1, 1)
strLink = Replace(strLink, "onmouseover", "", 1, -1, 1)
strLink = Replace(strLink, "onmousemove", "", 1, -1, 1)
strLink = Replace(strLink, "onmouseout", "", 1, -1, 1)
strLink = Replace(strLink, "onkeypress", "", 1, -1, 1)
strLink = Replace(strLink, "onkeydown", "", 1, -1, 1)
strLink = Replace(strLink, "onkeyup", "", 1, -1, 1)
strLink = Replace(strLink, "onfocus", "", 1, -1, 1)
strLink = Replace(strLink, "onblur", "", 1, -1, 1)
strLink = Replace(strLink, "&&", "")
strLink = Replace(strLink, "##", "")
strLink = Replace(strLink, "&#", "")
%>
<a href="<%= strLink %>">Continue</a>
解決
これは、HTMLのサニタイズに推奨するものです。
HTMLホワイトリストは、「App Engineで作成されたクールな小さなPython Webサービス」の最新版です。同僚のデウィット・クリントンによって。
1つのことを行い、それはうまくいきます。サービスHTMLを渡すと、サニタイズされたバージョンが返されます。
他のヒント
「ポジティブセキュリティモデル」の概念に従うアプローチを実装する必要があります。 「サイト」を解析する必要があります。許可されていないものを探すものを書くのではなく、許可されているものに明示的に準拠していることを確認してください。これにより、攻撃、特に予期しない攻撃に対するアプローチの弾力性が大幅に高まります。
正規表現を記述することをお勧めします(または、stackoverflowでそのような正規表現を記述する方法を尋ねます)。
また、Michaelが投稿したWebサービスはかなりクールですが、そのようなものに依存することを受け入れられるかどうかを評価する必要があります。
ページを続行するロジックを追加して、URLまたはIPアドレスのいずれかに基づいて、サイトのいずれかのページからのみ呼び出されるようにすることができます。セキュリティを強化するために、時間とハッシュコードを渡すこともできます。