关于网站功能页未授权访问的问题
我在做安全工程师的时候经常会遇到审计一个网站发现网站后台输入 /admin/可能给你提示出一个登录页,输/admin/left.jsp 却又能直接访问的问题。也许你会告诉他们,访问功能页要判断当前是否存在有效会话和对应级别id,他们也许听完之后哦的一声就去加了一个if(sessionid=0 && !empty(session)){redirect(‘index’);}(只是举例,实际上多管理员可以用switch)。但是等你复检的时候,再输个/left, 也会有可能遇到还是可以访问的问题。这个时候其实不是他们没有按照你说的做。而是没有做全。其实很多安全公司写的安全建议报告里面都是存在一项缺失的。那就是对网站模板的处理。不要小看这个模板,很多人你跟他说你的模板没处理,他青筋暴起瞪大眼睛跟你说,模板没处理不算没处理。实际上模板不处理有时候造成的后果也是不亚于功能脚本页没有进行有效会话判断的。比如说有的商业cms可能出于某些原因在js里实现了过多的功能,这些js里实现的功能参数往往过于详细,也许我们直接访问可能不容易猜测到js地址,但是模板页的源码通常情况下都会给我们一个很好的指引。那这里该如何处理呢?
在做完脚本页的有效判断后,我们只需要在模板页的首页对header content footer
进行分离调用即可。重新把头尾放到不同的include文件里,然后再去index页require它,这个时候,如果我们在index定义一个为true的常量,那完全可以在头尾的include文件里再次判断它是否存在,这样再访问首页时,尝试加载的头尾就会判断加载对象是否包含自己判断的常量。那么你直接访问常量肯定是不存在的。这样就可以完美避免非法调用模板的问题。再一个,也不要觉得模板功能页js都处理了就万事大吉了。不要忘了还有一个json。json
search还无伤大雅。转义实体处理处理字符串就行。但是要是涉及到会员数据的json。这里就危险了。所以,处理未授权访问应该面面俱到,不是说只判断当前是否有有效会话就完了的。
没有检查错别字。