规则4.7.1:对于JSP语言,所有servlet必须进行静态映射,不允许通过绝对路径访问。
说明:在web.xml文件中为servlet配置URI映射,使用servlet时,引用它的URI映射,而不允许通过绝对路径访问。 规则4.7.2:对客户端提交的表单请求进行合法性校验,防止跨站请求伪造攻击。 说明:跨站请求伪造(CSRF)是一种挟制终端用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。攻击者可以迫使用户去执行攻击者预先设置的操作,例如,如果用户登录网络银行去查看其存款余额,他没有退出网络银行系统就去了自己喜欢的论坛去灌水,如果攻击者在论坛中精心构造了一个恶意的链接并诱使该用户点击了该链接,那么该用户在网络银行帐户中的资金就有可能被转移到攻击者指定的帐户中。当CSRF针对普通用户发动攻击时,将对终端用户的数据和操作指令构成严重的威胁;当受攻击的终端用户具有管理员帐户的时候,CSRF攻击将危及整个Web应用程序。 实施指导:
方法一:为每个session创建唯一的随机字符串,并在受理请求时验证
//判断客户端提交的随机字符串是否正确
String randomStr = (String)request.getParameter(\if(randomStr == null) randomStr=\
if(randomStr.equals(request.getSession().getAttribute(\{//处理请求} else{
//跨站请求攻击,注销会话 }
方法二:受理重要操作请求时,在相应的表单页面增加图片验证码,用户提交操作请求的同时提交验证码,在服务器端先判断用户提交的验证码是否正确,验证码正确再受理操作请求。
方法三:向电信软件与核心网网络安全工程部申请WAF CBB,并部署到应用中,启用AntiCSRF功能,具体方法参考WAF CBB的用户手册。
规则4.7.3:使用.innerHtml时,如果只是要显示文本内容,必须在innerHTML取得内容后,再用正则表达式去除HTML标签,以预防跨站脚本。
说明:使用.innerHtml会将内容以HTML显示,容易被利用,导致跨站脚本。 实施指导:
href=\?>/gim,''))\无HTML,符合W3C标准
备注:还可以使用.innerText代替.innerHtml,.innerText只显示文本内容不显示HTML标签,但.innerText不是W3C标准的属性,不能适用于所有浏览器(但适
用于IE浏览器)。
规则4.7.4:禁止使用eval()函数来处理用户提交的字符串。
说明:eval()函数存在安全隐患,该函数可以把输入的字符串当作JavaScript表达式执行,容易被恶意用户利用。
建议4.7.1:关闭登录窗体表单中的自动填充功能,以防止浏览器记录用户名和口令。 说明:浏览器都具有自动保存用户输入数据和自动填充数据的能力。为了保障用户名和口令的安全,必须关闭自动填充选项,指示浏览器不要存储登录窗口中用户名、口令等敏感信息。 实施指导:
在form表单头中增加选项(autocomplete=\),例如: