先说说验证码破解
![](https://www.cnblogs.com/Emoticons/others/cool002.jpg)
然而博主使用的验证码其实很容易破掉。打开博主的网站http://freesms.cloudapp.net/Default.aspx,在图片验证码上点击右键然后选择“属性”,可以看到验证码的地址“http://freesms.cloudapp.net/VerifyCode.aspx?”。很奇怪吧,咋地是个aspx页面那!别着急,打开一个浏览器按shift+F2调出httpwatch(很有用的第三方IE插件,请自行获取安装。),点急record打开监控。下面把刚才获取的验证码地址粘贴到地址栏里并按回车访问他。下面是httpwatch抓到的部分返回结果:
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: image/Jpeg; charset=utf-8
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
Set-Cookie: 1945.47704561149=IDNH6; path=/
X-Powered-By: ASP.NET
Date: Sat, 19 Sep 2009 14:28:58 GMT
Content-Length: 8697
请注意这一行“Set-Cookie: 1945.47704561149=IDNH6; path=/”再看看ie里的显示
如下图
![](https://images.cnblogs.com/cnblogs_com/wangwei/验证码.jpg)
诸位看官应该明白怎么回事了吧。VerifyCode.aspx的任务很简单,随意生成一组字母如“IDNH6”然后把它变成图像输出到客户的,并把这组字母以明文的形式保存到cookie里,以便用户提交请求时从cookie中读取并与用户提交的结果进行比较。
要想破解只要在提交post请求时在http头里伪造一个假的cookie值即可。因为校验程序只要确认用户填写的验证码和cookie里的那个(可以伪造)相同就放行。
再谈谈第二个问题“恶意用户通过使用代理变换IP来摆脱作者的限制”。
所谓使用代理来变换IP对大部分asp.net网站其实不需要挂代理就能实现IP的欺骗。
先看一段网上广为流传的获取用户真实IP的实现代码
#region 获取用户真实IP地址
/// <summary>
/// 获取用户真实IP地址
/// </summary>
/// <returns>返回用户真实IP</returns>
public static string GetUserRealrIp()
{
string user_IP = "";
if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
{
user_IP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}
else
{
user_IP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
}
return user_IP;
}
#endregion
下面演示一下如何伪造一个虚假的访问IP
不多介绍,直接上代码
制造虚假IP的客户的:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
getip.aspx
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
下面是运行结果:
如何避免这种地址获取机制的缺陷,还是请大家各抒己见吧。