1

いくつかのテキストボックスと、テキストボックスにあるものをデータベースに保存する保存手順をバックエンドで実行する単純なボタンコントロールを備えた .net フォーム (c#) があります。これは、信頼できるユーザーのみが使用する内部システム用です。現在、どのボックスにも検証はありません。

システムは機能しますが、開始タグ文字または終了タグ文字 (「<」または「>」) がページのテキスト ボックスに入力されると、ボタンは自動的に無効になります。あなたはそれをクリックしても何も起こりません(私は先に進み、保存ボタンのブレークポイントを通過して、それがまったく発射されているかどうか、サイコロがないかどうかを確認しました)

これは、おそらくSQLインジェクション攻撃などを防ぐための、Webフォームに組み込まれたメカニズムのようなものだと思いますか?無効にする方法はありますか?

-- 関連するコードを追加するための編集。そもそも保存ボタンが起動しないため、保存ボタンの機能については詳しく説明しないことに注意してください。テキストボックス (txtText_Box1) に「<」または「>」がないと、問題なく正常に動作します。

<b>Title</b><br />
        <asp:TextBox ID="txtTitle_Box1" runat="server" Width="600px"></asp:TextBox><br /><br />
        <b>Text</b><br />
        <asp:TextBox ID="txtText_Box1" runat="server" Width="600px" TextMode="MultiLine" Rows="4"></asp:TextBox><br /><br />
        <b>Link To</b><br />
        <asp:TextBox ID="txtLink_Box1" runat="server" Width="600px" /><br /><br />
        <b>Link Text (always ends with >>)</b><br />
        <asp:TextBox ID="txtLinkText_Box1" runat="server" Width="600px" /><br /><br />
        <b>Image</b><br />
        <asp:Image id="imgBox4" runat="server" /><br /><br />
        <br /><br />
        <asp:Button ID="btnSave" runat="server" Text="Save Changes" CssClass="cssButton1" OnClick="btnSave_Click" />


     protected void btnSave_Click(object sender, EventArgs args)
    {

            string sTitle = string.Empty;
            string sText = string.Empty;
            string sURL = string.Empty;
            string sLinkText = string.Empty;

            sTitle = txtTitle_Box1.Text.ToString();
            sText = txtText_Box1.Text.ToString();
            sURL = txtLink_Box1.Text.ToString();
            sLinkText = txtLinkText_Box1.Text.ToString();

            ....

    }
4

1 に答える 1

0

試行錯誤の末、ボタンをワンクリックするキャラクターを1つだけに絞り込みました。「<」、SQL インジェクション攻撃で最も一般的なものを含む、キーボード上の他のすべての文字は正常に機能します。問題を実際に「修正」したわけではありませんが、回避策を実装してエスケープ文字を入れました。「<」の代わりに「::」。非常にばかげているようで、なぜこれが起こっているのかまだわかりませんが、問題を乗り越えることができます. 誰かがより良いアイデアを持っている場合は、この回答をキャンセルして、あなたに完全な信用を与えるようお願いします.

于 2012-04-06T13:58:47.020 に答える