chiname

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

如果做到安全的系统之验证用户输入.

程序员或者软件工程师一般都不太注意这个安全的问题. 事实上,对于安全而言有一个基本的思路,只要验证用户的请求应该就可以屏蔽大多数的安全漏洞.

比如很多人会建议,不要拼写SQL语句,比较sql脚本攻击, 不要轻易轻信客户端的请求等.

比如对asp.net 很多人会用用户验证控件,事实上,验证是再客户端进行,我可以禁用所有的script, 让他正常的Post 到服务端. 有些人可能做成客户端安全验证不通过,就把button改为disabled. 事实上我只要在IE 的地址栏执行个小script就可以改为enabled

今天早上看博客堂http://blog.joycode.com/, 回复的时候,估计开心为了避免spam,就稍微修改了一下代码,每次都验证用户的请求.  要求输入一个验证码. 事实上,他做的很不安全.

比如你随便浏览一个页面,需要用户验证的地方, http://blog.joycode.com/kaneboy/archive/2005/12/11/68691.aspx

然后在IE 中,输入javascript:alert(document.cookie) 就会看到验证码就写在cookie中,这个太容易pass through了

cookie 的内容: CheckCode=NJYQ; CommentUser=Name=montaque&Url=

回复的下方正好是NJYQ的图形. 这个很容易就知道应该输入什么,读一下cookie就可以了. 当然,我如果每次嫌输入验证码太麻烦的话, 直接修改你的cookie中checkcode为固定的值,就可以回复了.

早上还收到了一个更cool的漏洞

Motorola SB5100E Cable Modem
Sending "land" packet to motorola device, will cause it to crash.

"LanD" packet is simple TCP syn packet:
Source IP = 192.168.100.1
Destanation IP = 192.168.100.1
Source Port = 80
Destanation Port =80
SYN  Flag= 1

One packet can crash modem and all network on cable part will be unreacheble.
Only physical restart can help.

呵呵,验证用户的输入, 不要轻信客户端的验证. 这是两个基本策略. :)

posted on 2005-12-12 11:50 montaque 阅读(141) 评论(8)  编辑 收藏 收藏至365Key 所属分类: .NET 企业应用

评论

# re: 如果做到安全的系统之验证用户输入. 2005-12-12 12:15 垃圾猪
个人感觉对验证证进行Sha1加密再放到客户端比较好.看到了也没用!
  

# re: 如果做到安全的系统之验证用户输入. 2005-12-12 12:20 montaqueh
是, 简单的hash运算一下,或者像csdn一样,放到服务端.
  

# re: 如果做到安全的系统之验证用户输入. 2005-12-12 12:47 垃圾猪
对验证码我们没必要还原它,对于用户传递过来的数据,我们像验证密码一样单向验证就能检测验证码是否匹配了,关于放在服务端,那是不能可能,总有一条线索与客户机进行关联,比如Session,看上去是服务器上的,实际上也是与客户的Cookie关联,如果一定要把验证码放在服务器,那只有把客户身份唯一关联到服务器然后再进行关联查询.
  

# re: 如果做到安全的系统之验证用户输入. 2005-12-12 12:57 風語者·疾風
如果我没记错,验证控件是客户端+服务器端双重验证的,不存在你说的那个问题。
  

# re: 如果做到安全的系统之验证用户输入. 2005-12-12 13:09 XiaoHui
呵呵,似乎不是开心在维护,好象是宝玉在维护.如果没记错的话.
  

# re: 如果做到安全的系统之验证用户输入. 2005-12-12 13:31 montaque
@風語者·疾風 ,

当然,你说的不错.

我的意思是说,客户端不可靠.

比如一个requiredvalidator, 如果客户端不支持脚本或者禁用,你就可以不填写任何东西post到服务端.

这时候,你服务端,要判断page 是否是valid ,否则非法的数据也就被你handle了.

@XiaoHui 有可能吧,呵呵.好似博克园也是这么实现的.
  

# re: 如果做到安全的系统之验证用户输入. 2005-12-12 13:36 montaque
我再举一个例子:

很多人说IE不好,Firefox 好. 你可以新建一个htm,源代码如下:

<html><head><title>heh</title><script type="text/javascript">
function ex() {
var buffer = "";
for (var i = 0; i < 5000; i++) {
buffer += "A";
}
var buffer2 = buffer;
for (i = 0; i < 500; i++) {
buffer2 += buffer;
}
document.title = buffer2;
}
</script></head><body>ZIPLOCK says <a href="javascript:ex();">CLICK ME
</a></body></html>

然后你用firefox 浏览一下, 看发生什么问题.

这时候你点击firefox 的历史记录的时候,她就down了.

然后更新的版本,启动的时候就check历史, firefox 就拒绝服务喽.

所以处理历史记录,最起码要验证key的长度,给你一个10K长的索引,就faint了
  

# re: 如果做到安全的系统之验证用户输入. 2005-12-12 13:47 lovecherry
客户端的东西都要想成不可信
posted on 2005-12-12 14:06  把我的欢乐带给你  阅读(170)  评论(0)    收藏  举报