1

我有一个 .net 表单 (c#),有几个文本框和一个简单的按钮控件,它在后端运行一个保存过程,将文本框中的任何内容保存到数据库中。这适用于只有受信任用户使用它的内部系统。目前任何盒子都没有验证。

系统可以工作,但如果在页面上的任何文本框中输入任何开始或结束标记字符(“<”或“>”),按钮将自动被禁用。您单击它并没有任何反应(我继续并通过保存按钮上的断点查看它是否甚至被触发,并且没有骰子)

我假设这是网络表单中的某种内置机制,可以防止 sql 注入攻击或其他什么?有没有办法禁用它?

-- 编辑添加相关代码。请注意,我不会深入了解保存按钮的作用,因为它一开始就不会触发。文本框(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

经过大量的试验和错误,我将其缩小到只有一个字符会影响按钮。“<”,键盘上的所有其他字符,包括在 sql 注入攻击中最普遍的字符都可以正常工作。我并没有真正“解决”这个问题,但我实施了一种解决方法并输入了一个转义字符。“::”而不是“<”。看起来非常愚蠢,我仍然不知道为什么会这样,但它确实让我克服了我的问题。如果有人有更好的主意,我肯定会要求取消此答案并完全归功于您。

于 2012-04-06T13:58:47.020 回答