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