程序开发中的几个请不要相信

所属分类: 网络编程 / 相关技巧 阅读数: 1723
收藏 0 赞 0 分享
链接中的例子是一些脚本攻击相关的内容,有时间的朋友可以点开看看。

1.不要相信Request.QueryString:

相信在asp时代,这个问题比较严重,不信,随便到网络上找几个asp的企业站,找到这种url"view.asp?id=xxx",改成"view.asp?id=xxx or 1=1",相信你会看到不一样的东西,到了.net,应该很少了,不过上次看到有人说CSDN爆过哦,简单的解决方法是在取得数据时做数据类型验证或转换。比如:
int ViewID = 0;
if(int.TryParse(Request.QueryString["ID"], out ViewID)){
//...
}
2.不要相信maxlength:
 有时候我们想客户端输入的某个值不超过一定的长度,这个时候可能就会用到input的maxlength,但maxlength能100%保证这个值的长度不超过maxlength吗?

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]

显然,maxlength是不可信的,简单的解决办法是后台代码验证数据长度:
string UserName = Request.QueryString["UserName"];
if(!string.IsNullOrEmpty(UserName)&&UserName.length > x){
//...提示错误或截断数据
}
3.不要相信Hidden:
有时候我们想把些信息保存到前台页面,然后再发送回来,但是我们又不想让客户看到这个信息,于是,我们把数据放到了hidden里面,那客户提交数据时,hidden里的内容真的是我们放的内容吗?

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]

这个我一时也没想到好的验证方法,暂时也没有特殊的需求说必须验证。
4.不要相信客户端验证:

比如2和3中的问题,可能有的朋友觉得,我客户端再加个验证不就OK了吗?可是,往往,客户端验证也是不安全的,首先,如果客户端禁用脚本,那客户端验证是完全失效的,另外,在脚本有效的情况下,脚本验证也是可以被篡改的。

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]

以前QQ空间里可以通过这个方法免费使用黄钻模板,不知道现在还有没有。这个就没有什么好的解决办法,只能后台再验证一次。
5.不要相信编辑器:

有的时候,可能项目中要用到一些简单的编辑器,于是,我们就找到了一些编辑器,把不需要的功能(比如:编辑源码、插入图片等)剔除掉,就成了个简单的编辑器,那这样的编辑器还会有什么问题吗?

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]

暂时也没有什么好的解决办法,以前找到过过滤script标签的代码,但似乎不太完美。
6.不要相信Cookie:
网站中不可避免的会使用到Cookie,但如果一不注意,小心你的Cookie成了别人的"Cookie",
http://img.jb51.net/online/demo0415/Cookie.asp
取Cookie和写Cookie的js方法是在网上找到的,具体链接也找不到了。解决办法,似乎是Cookie加密(当然,即使是加密了,也尽量不要把敏感数据放到Cookie中),不知道各位高手还有没有其它好办法。
7.不要相信Request.UrlReferrer:
如果有朋友用这个来验证请求,那么请注意了,这个东西也是不可信的。见代码;
System.Net.HttpWebRequest request = System.Net.WebRequest.Create("https://www.jb51.net/") as System.Net.HttpWebRequest;
request.Referer = "https://www.jb51.net/";
...
那么,这个时候你取得的Urlreferrer会是https://www.jb51.net/,但这个请求却是伪造的。
8.不要相信用户:
用户就是你潜在的威胁,客户端的东西,永远都不要轻信。
另,select标签的内容也是不可信的,大家可以动手试试,随便建个页面,里面放个select,然后:
复制代码 代码如下:

javascript:alert(window.c=function(){var s=document.getElementsByTagName("select")[0];for(var x = 0; x < 100; x++){s.options[x]=new Option("选项" + x, x)}}());

欢迎高手不吝赐教。示例代码下载
更多精彩内容其他人还在看

firefox 扩展开发技巧

firefox 扩展开发
收藏 0 赞 0 分享

php asp.net 比较 [推荐]

如今当提到 Web 开发时,您有许多选择。这些方法中许多都涉及到预处理 - 即,利用特定的标记将代码嵌入到 HTML 页面中
收藏 0 赞 0 分享

UTF-8 BOM 可能导致样式错乱的解决方法

utf-8 是一种在web应用中经常使用的一种 unicode 字符的编码方式,使用 utf-8 的好处在于它是一种变长的编码方式,对于 ANSII 码编码长度为1个字节,这样的话在传输大量 ASCII 字符集的网页时,可以大量节约网络带宽。
收藏 0 赞 0 分享

Web 开发常用工具 大家自己查找下载

看到了Web通信分析工具 这篇文章,除了burpsuite其他我日常都经常使用。于似乎我整理了一下我自己用的其他的WEB开发工具。
收藏 0 赞 0 分享

遇到不能复制的网站怎么办?

有时我们看到喜欢的网页内容时定会产生复制下来为我所用的冲动,不过当你点击鼠标时它却没有任何反应,选择的内容没有任何变化,不禁有点扫兴。不要紧,办法总比困难多!
收藏 0 赞 0 分享

URL 长度有限制吗?

众所周知, 传递小量参数(在没有其他原因,例如隐藏参数值的情况下)推荐使用GET方法,传递大量参数推荐使用POST方法。原因是什么呢?
收藏 0 赞 0 分享

声音验证码制作方法

收听验证码已经比较普遍了,使用户看不清楚的情况下可以通过耳朵来收听验证码,但网上搜了很久没看到有具体的制作方法,自己想了想,还是按自己的方法来实现了,呵呵。
收藏 0 赞 0 分享

防范SQL注入式攻击

SQL注入式攻击是利用是指利用设计上的漏洞,在目标服务器上运行Sql命令以及进行其他方式的攻击动态生成Sql命令时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因。
收藏 0 赞 0 分享

Web 设计与开发者必须知道的 15 个站点

今天读到一篇文章,介绍了15个对 Web 设计与开发师极端有用的站点,里面有不少也是我们一直在使用的,也许对很多人都有用,翻译出来以饷同仁。
收藏 0 赞 0 分享

十分钟内学会 避免用户刷新导致重复POST提交

在Web应用中,采用POST提交信息是非常常见的,然而如果目标页面打开得太慢,用户就可能会刷新页面,这时候之前已经提交过的信息就会被重复提交。
收藏 0 赞 0 分享
查看更多