向ASPX页面POST数据出现不安全提示

[ 2006-05-13 00:09:41 | 作者: admin ]
字号: | |
[现象]
向一个正确的ASPX页面用"POST"方式发送数据:"TEST"正常,而发送"<TEST"数据,返回(500) Internal Server Error 内部服务器错误的信息, 调试时显示的信息是:

未处理的“System.Net.WebException”类型的异常出现在 system.dll 中。

其他信息: 远程服务器返回错误: (500) 内部服务器错误。


[原因]
ASP.NET中为了防止注入攻击,对"<"等字符进行了限制

[解决]
方式一: 在被请求的ASPX页面中,将 Page指令中的ValidateRequest 设置"false",例如:


<%@ page validateRequest=false %>
方式二: 将数据作为XML数据发送,例如:
public void PostXml(string url, string xml)
{
      byte[] bytes = Encoding.UTF8.GetBytes(xml);
      HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
      request.Method = "POST";
      request.ContentLength = bytes.Length;
      request.ContentType = "text/xml";
      using (Stream requestStream = request.GetRequestStream()) {
          requestStream.Write(bytes, 0, bytes.Length);
      }

      HttpWebResponse response = (HttpWebResponse) request.GetResponse();
      if (response.StatusCode != HttpStatusCode.OK) {
          string message = String.Format("POST failed. Received HTTP {0}",
          response.StatusCode);
          throw new ApplicationException(message);
      }
}
接收端通过Request.InputStream读取:
byte[] byts = new byte[Request.InputStream.Length];
Request.InputStream.Read(byts,0,byts.Length);
string req = System.Text.Encoding.Default.GetString(byts);
req = Server.UrlDecode(req);
对于完整的XML数据,可以: xmlDoc = new XmlDocument();
xmlDoc.load(Request.InputStream);
推荐采用方式二.
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=566

这篇日志没有评论。

此日志不可发表评论。