4

これがシナリオです。現在、マルチテナント CMS システム用に Razor テンプレートをディスクに保存しています。マルチテナント システムの管理者が独自の Web サイト テンプレート(レイアウト) をアップロードできるようにする必要がありますが、その際、潜在的に有害な Razor マークアップが含まれていないことを確認する必要があります。

事実上、クライアントのテンプレートに含まれる可能性のある Razor 構文をエンコードできるようにしたいと考えています。

提案: dotliquidのような安全なテンプレート システムを使用して、管理者が承認済みのタグ
で装飾されたテンプレートをアップロードできるようにします。アップロード時に、潜在的な Razor 構文 を回避するために、最初にすべての「@」記号を「@@」に置き換えます。次に、承認されたタグを適切な Razor マークアップに置き換え、テンプレートをデータベースに保存します。 ページをロードすると、カスタムVirtualPathProviderが利用されます- この質問の範囲外です...

質問

  1. すべての「@」記号を単に「@@」に置き換えるだけで、テンプレートに存在する可能性のあるすべての剃刀マークアップを効果的に「エンコード」できますか?
  2. メール アドレスや Twitter ハンドルなど、正当な "@" 記号がテンプレートに含まれていた場合、懸念はありますか? 私の最初のテストでは、二重エスケープが機能することが示されています。

アップデート

私のテストでは、すべての "@" 記号を別の "@" 記号でエスケープすると、Razor 構文がエスケープされてテンプレートがサニタイズされることが示されています。しかし、このテーマについてより深い知識を持っているかもしれない誰かから聞いてみたい.

4

1 に答える 1

-1

1) かみそりコードを挿入する関数を @ で記述して、かみそりインジェクションを防ぐことは、ハックなソリューションのようなものです。焦げたブラウニーにアイシングを加えて味を良くするようなものです。そもそもなんで予防しないの?

代わりに、対応するビューでこれを試してください。

<%=Html.Encode(feedback.Message)%>

または追加

<text> ... </text> 

処理される前の入力に。

2) 正当な電子メール アドレスであることを保証できる場合は、問題ありません。しかし、それを保証するのは難しいです。そのため、JavaScript 正規表現を使用したシンプルで効果的な電子メール検証を使用することをお勧めします。これは、電子メールを検証するために JavaScript に入れることができるブール関数です (この正規表現の成功率は ~95% です)。

function isValidEmailAddress(emailAddress) 
{    
    var emailPattern = new RegExp(/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i);
    return emailPattern.test(emailAddress);
}
于 2013-07-10T21:01:18.637 に答える