向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);
推荐采用方式二.
向一个正确的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: http://blog.xg98.com/feed.asp?q=comment&id=566
这篇日志没有评论。
此日志不可发表评论。