HTTP协议本身就是非常不可靠的,不要相信任何用户的输入,包括Server变量里面的任何东西,这是HTTP安全编程的第一个指导原则。
看到有人问,如何防止站外提交Form,想法是好的,看起来答案是用HTTP_REFER这个变量,但是世界上,这个变量也是从HTTP Header里面REFER,用一个简单的socket程序,就可以自己随便构造一个HTTP Header, 所以用PHP,asp.net和Perl实现起来简单的很。在放到底一层的raw TCP编程上,连client的IP地址都可以随便骗你(IP欺骗,不过实现起来麻烦些)。
所以,不要相信任何东西,如何在Client端验证过的东西,在服务器端必须要重新验证一次。抱着这个观点放在脑子里,写出来的程序会好一些。
在所有接触过的语言中,ASP.Net中的验证控件设计的应该是最好的了,尤其是ASP.Net 2.0中的login 控件,实际上,绝大多数的漏洞都是从login里攻击的。