【问题标题】:How do I insert html tags/script to sql as a text?如何将 html 标签/脚本作为文本插入到 sql 中?
【发布时间】:2012-06-09 13:09:00
【问题描述】:

我正在尝试开发一个“练习”应用程序,其中文本框值将被插入到数据库中。

当我插入 textbox.text 值时会发生什么。

例如。文字 =

           <script>alert('Hello')</script>

我收到一个错误:从客户端检测到具有潜在危险的 Request.Form 值 (TextBox1="alert('XSS')...")。

我已经在使用 sql 参数,所以像 ' " /// \\ 这样的值现在不是问题。

【问题讨论】:

    标签: c# asp.net sql-server webforms


    【解决方案1】:

    为您的页面设置 ValidateRequest="false",以允许 html。

    在页面级别:

    <%@ Page Language="c#"  ValidateRequest="false" AutoEventWireup="false" CodeBehind="TestPage.aspx.cs" Inherits="TestPage" %>
    

    此外,对于 ASP.NET 4.0,您需要将以下内容添加到您的 web.config:

    <httpRuntime requestValidationMode="2.0" />
    

    【讨论】:

    • 为页面设置 ValidateRequest="false" 会削弱该页面的安全性,我建议改为使用 HTML 编辑器控件。
    • 谢谢您(谢谢++)先生的即时回复,但是是否可以在不更改您上述值的情况下做到这一点。 (我只是好奇是否可能):D
    【解决方案2】:

    如果仅用于测试目的,您可能会禁止 ASP.NET 验证器,因此它将停止寻找可能存在潜在危险的 HTML/XML 标记。为此,请在您的 aspx 页面中将 ValidateRequest 设置为 false。

    <%@ Page Title="" Language="C#" ValidateRequest="false"
    

    不建议将这用于生产环境,但在您的情况下可以做到这一点。更多信息请关注MSDN Link

    【讨论】:

      【解决方案3】:

      这不是 asp.net 警告的(潜在的)sql 问题。当您接受该值并稍后在您的页面中显示它没有编码,那么不需要的脚本就会触发。

      此时它会显示一个无害的警报,但如果您允许任何用户输入这些值,那么谁知道会发生什么。

      【讨论】:

        【解决方案4】:

        您可以在连接字符串中插入中断的标记。比如:

        Insert into table values('<'+'h2'+'>'+'Another One'+'<'+'/'+'h2'+'>')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-08
          • 1970-01-01
          • 1970-01-01
          • 2017-01-04
          • 2011-11-08
          • 2011-08-06
          • 2020-12-21
          相关资源
          最近更新 更多