从客户端中检测到有潜在危险的 Request.Form 值

本文介绍了解决网页表单提交时遇到HTML标签导致的安全问题的方法,包括禁用验证、自定义错误处理和对输入进行编码。重点讨论了如何避免误拦截有效请求并防止跨站脚本攻击,同时提供了对输入内容的选择性允许和禁止策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       当提交的表单存在html标签时会报“从客户端中检测到有潜在危险的 Request.Form 值”错,解决办法有几种

1、web.config文档<system.web>后面加入这一句: <pages validaterequest="false"/> 
示例: 
<?xml version="1.0" encoding="gb2312" ?> 
<configuration> 
<system.web> 
<pages validaterequest="false"/> 
</system.web> 
</configuration>

2、在*.aspx文档头的page中加入validaterequest="false",示例如下: 
<%@ page validaterequest="false" language="c#" codebehind="index.aspx.cs" autoeventwireup="false" inherits="mybbs.webform1" %> 


这两种做法都能达到,不报错的目的,但是,不是最有效的解决办法,因为这两种做法都是,禁掉了微软为我们提供的一个xss(夸站脚本攻击)验证,当用户试图用<br/>之类的提交内容,影响返回结果时,asp.net引擎会引发一个HttpRequestValidationExceptioin。这是一个很重要的特性最好不要禁止 而是用友好的方法给用户一个提示


3、protected void Page_Error(object sender, EventArgs e)
        {


            Exception ex = Server.GetLastError();


            if (HttpContext.Current.Server.GetLastError() is HttpRequestValidationException)
            {


                HttpContext.Current.Response.Write("请输入合法的字符串【<a href=\"javascript:history.back(0);\">返回</a>】");


                HttpContext.Current.Server.ClearError();


            }


        }

这样就会直接给用户一个提示,而不是直接禁掉。



关于提交html标签,我们可以对它进行编码,选择性的允许一些标签,禁止一些标签

void submitBtn_Click(object sender, EventArgs e)
{
//将输入字符串编码,这样所有的HTML标签都失效了。
StringBuilder sb = new StringBuilder(HttpUtility.HtmlEncode(htmlInputTxt.Text));
//然后我们选择性的允许<b> 和 <i>
sb.Replace("&lt;b&gt;", "<b>");
sb.Replace(
"&lt;/b&gt;", "</b>");
sb.Replace(
"&lt;i&gt;", "<i>");
sb.Replace(
"&lt;/i&gt;", "</i>");
Response.Write(sb.ToString());
}

其中要慎重允许一下标签

<applet> 
<body> 
<embed> 
<frame> 
<script> 
<frameset> 
<html> 
<iframe> 
<img> 
<style> 
<layer> 
<link> 
<ilayer> 
<meta> 
<object>

这些标签最有可能引起夸站脚本攻击

其中<img> 要慎重<img src="javascript:alert("hello")">


根据提供的引用内容,无法直接回答你的问题。引用和引用提供了一些关于字段类型和动态字段的信息,但与从客户端检测潜在危险Request.Form无关。 要从客户端检测潜在危险Request.Form,你可以使用一些安全性工具和技术来帮助你识别和处理潜在的安全问题。以下是一些常见的方法: 1. 输入验证:对于从客户端接收到的所有输入数据,包括Request.Form,都应该进行验证。验证可以包括检查输入的长度、格式、类型和特殊字符等。你可以使用正则表达式或内置的验证函数来实现输入验证。 2. 输出编码:在将从Request.Form获取的输出到响应中时,确保对进行适当的编码,以防止跨站点脚本攻击(XSS)。常见的编码方法包括HTML编码和URL编码。 3. 防范SQL注入:如果你将Request.Form用于构建SQL查询,确保使用参数化查询或预编译语句来防止SQL注入攻击。不要直接将Request.Form拼接到SQL查询字符串中。 4. 防范跨站点请求伪造(CSRF):对于涉及敏感操作的请求,例如更改密码或删除数据,确保使用CSRF令牌来验证请求的合法性。CSRF令牌可以防止恶意网站利用用户的身份进行伪造请求。 5. 安全审计日志:记录所有与Request.Form相关的操作,包括输入验证失败、异常请求和安全事件。这些日志可以帮助你追踪和调查潜在的安全问题。 请注意,以上方法只是一些常见的安全措施,具体的实施方法可能因你使用的编程语言和框架而有所不同。建议你查阅相关的安全文档和指南,以了解更多关于保护Web应用程序安全的最佳实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值