基本思路:
为每一个功能写一个独立的程序,程序页
尽可能少的让客户了解你的服务器端信息
不要用"客户应该这么写"这个思路想问题
尽可能多的想到不可能发生的事情
1.关于交互式动态网页可能存在的问题
1.1form类型的交互
1.1.1概念介绍
在我们和浏览者进行交互时,最常用到的就是form(post/get/put方法),虽然非常方便,但是很多问题也是因他而起。
form表单中input标志
用来接受用户输入的信息,例如:用户名、密码、email等。如果你没有对用户输入进行很好的检查的话,一个恶意的用户
会屏蔽掉一些安全机
制,绕过安全认证。例如,输入标准的HTML语句或者javascript语句会改变输出结果,在输入框中打入标准的HTML语句会
得到什么样的结果呢?比如一个留言本,我们留言内容中打入:<fontsize=10>你好!</font> 如果你的程序中没有屏
蔽html语句,那么就会改变"你好"字体的
大小。在留言本中改变字体大小和贴图有时并不是什么坏事,反而可以使留言本生动。但是如果在输入框中写个
javascript的死循环,比如:
<aherf="http://someurl"onMouseover="while(1){window.close('/')}">第一万个惊心动魄</a>那么其他查看该留言
的客人只要移
动鼠标到"第一万个惊心动魄",上就会使用户的浏览器因死循环而死掉。
1.1.2防范要点
(1)对特殊字符进行过滤
([/&;/`'///|"*?~<>^/(/)/[/]/{/}/$/n/r])///$1/g;),这个是最基本的,在很多地方也已经不只一次提到过
<scriptlanguage="vbscript">
subuBotton_onclick
ifform1.uUserName.value=""then
msgbox"您的姓名不能为空!",0+32,"哦!还不行"
form1.uUserName.focus
exitsub
endif
ifform1.uPassword.value=""then
msgbox"您的密码不能为空!",0+32,"哦!还不行"
form1.uPassword.focus
exitsub
endif
ifform1.uUserName.value=""then
msgbox"您的姓名不能为空!",0+32,"哦!还不行"
form1.uUserName.focus
exitsub
endif
form1.submit
endsub
</script>
functionisEmpty(objname)
{
varstr=document.inputform[objname].value
vartmpstr=str.replace([/&;/`'///|"*?~<>^/(/)/[/]/{/}/$/n/r])///$1/g;,"")
vartmpstr=tmpstr.replace([/&;/`'///|"*?~<>^/(/)/[/]/{/}/$/n/r])///$1/g;,"")
return(tmpstr.length==0)
}
functioncheck()
{
tf=document.inputform
errors=""
if(isEmpty("username"))errors+="用户名不能为空。/n";
if(isEmpty("password"))errors+="密码不能为空!/n"
if(errors!="")
alert(errors);
return(errors=="")