我正在使用php脚本将某些xml文件发布到.net网址。
当我提交时,我得到回复:
潜在危险的Request.Form 从客户端检测到的值 (<?xml version =“... UTF-8”?><!DOCTYPE cXML SYSTE ...“)。描述:请求 验证已检测到潜在的 危险的客户输入值,和 已经处理了请求 中止。该值可能表示a 试图破坏安全 您的应用程序,例如跨站点 脚本攻击。你可以禁用 通过设置请求验证 页面中的validateRequest = false 指令或在配置中 部分。然而,它是强烈的 建议你的申请 明确检查此中的所有输入 情况下。
由于我没有使用.NET,因此我无法在web.config中设置ValidateRequest =“false”。
在提交之前,我是否需要清理我的xml?我怎么能这样做?
答案 0 :(得分:3)
有趣的是,可以查看完整错误,但无法访问ASP.NET代码。通常,在调试模式下只能看到完整错误,因为在生产中,错误设置是(应该)RemoteOnly
或Off
。这似乎是一个配置错误,并且在ASP.NET站点方面存在潜在风险。
你说“对http发布一些xml文件”。如果您确实发布了文件,则不会收到此回复。也许您可以联系该网站的所有者,并要求他更改表单以允许文件输入。
您可以更改输入,使其看起来不再像XML,但它也不再是XML。即,更改<
中的所有<
,您将能够获取数据,但在处理时必须取消转义。
如果该站点应该接受XML,则必须将其更改为接受XML。它应该接受文件,或者它应该通过将ValidateRequest
关闭来接受HTML / XML输入。如果它不应该接收XML,那么你几乎无能为力。这就像填写银行的付款表格一样,在金额字段中加上字母:它只是不起作用(除非它的设计是以这种方式工作)。
答案 1 :(得分:3)
在MVC上,将以下内容放在帖子上
[HttpPost, ValidateInput(false)]
public ActionResult PostMethod(Model viewModel)
答案 2 :(得分:2)
您需要在接收XML的页面中设置ValidateRequest="false"
,而不是在发送的页面中设置{{1}}。如果您没有对要传递XML的页面的任何访问权限,那么您需要找到另一种传递数据的方法,或者首先将其转换为另一种格式,因为几乎所有看起来都是如此就像HTML一样会导致asp.net页面触发此警告。
答案 3 :(得分:1)
XML或任何“看起来像”它的东西,默认情况下被认为是危险的,是阻止XSS攻击期望明文内容的合理方法。
问题在于您提交的资源,而不是您的代码,向他们提交错误或技术支持请求。
答案 4 :(得分:1)
如果使用ASP.NET 4.0,则在页面
中进行设置除外<%@ Page ValidateRequest="false" />
添加web.config
<httpRuntime requestValidationMode="2.0" />
这应该有帮助