3

非常に大きな Web アプリケーションがあります。
合計で約 120.000 行。

このアプリケーションでは、ユーザーはテキストを入力する可能性がたくさんあります。
ユーザー情報、フォルダ、グループなど。

一部のユーザーは、 のようにさまざまなオブジェクトに名前を付けたいと考えていますAge < 20
ASP.NET は、javascript インジェクションを防ぐための "<" のためにそのような入力をブロックするため、問題がありました。

これらの安全メカニズムをシャットダウンする方法を見つけましたが、現在、アプリケーションは安全ではありません。

質問は次のとおり
です。アプリケーションがそのような入力をプレーンテキストとして処理するために、設定やプロパティ、またはグローバルに設定できるものはありますか (アプリケーション全体に対して 1 点で)。

たとえば、ユーザーがフォルダに名前を付けたい場合は、<script>alert("ALERT");</script>そのように名前を付ける必要があり、同じように表示されます<script>alert("ALERT");</script>が、スクリプトは実行されません。

HTML の場合も同様ですFolder<br>OneFolder<br>One
Folder
One

もちろん、HTML-Encode/-Decode を使用することもできますが、プロジェクト全体を調べて、入力が行われたり表示されたりする場所に Encoding/Decoding を追加したくありません...
また、グローバル ソリューションは将来の開発で間違いを犯します。

もう一度質問: すべてのテキストを text と同じように処理する方法はありますか? そして、それは可能な限りグローバルですか?

私の問題を理解し、可能性を知っていただければ幸いです。

4

2 に答える 2

0

JQuery を使用している場合、値を任意のスパンまたは div に設定するたびに、

使用する:

$('#myDiv').text('<script>alert("a")</script>');

そして使用しないでください:

    $('#myDiv').html('<script>alert("a")</script>');

また

    $('#myDiv').innerHTML='<script>alert("a")</script>';
于 2012-11-27T10:33:34.893 に答える
0

試してみるよりも HTML エンコード デコードを使用したくない場合は、次ValidateRequest="false"のコードのように実行できます。

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" ValidateRequest="false" Inherits="_Default" %>

使用したい別のテクニックは次のとおりです。

<script>
      function Encode() {
       var value = (document.getElementById('TextBox1').value);
       value = value.replace('<', "&lt;");
       value = value.replace('>', "&gt;");
       document.getElementById('TextBox1').value = value;
      }
 </script>

</head>
<body>
 <form id="form1" runat="server">
 <asp:TextBox ID="TextBox1"  runat="server"></asp:TextBox>
 <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="Encode()" />
 </form>

サーバ側

protected void Page_Load(object sender, EventArgs e)
 {
  this.TextBox1.Text = Server.HtmlDecode(this.TextBox1.Text);
 }
于 2012-11-27T10:56:10.780 に答える