认证与授权
认证:访问网站时需要登录,用户名和密码的提交校验就是认证的过程。
授权:登录网站后,每个人所能访问的页面不尽相同,就是授权的作用。
如何测试:得到需要登录才能访问的页面(可通过页面属性、抓包等工具),直接拷贝在浏览器地址栏中访问,如果加了安全机制,直接访问会提示错误;否则,不安全。
session 与 cookie
session和cookie提高了用户体验,但不应该存放一些敏感数据,如身份证、手机号等。
另外,不同的web站点的作用域应区分开,以避免出现不必要的麻烦。
如何测试:浏览器的开发者工具、抓包工具等都可以看到相应的信息。
DDOS 拒绝服务攻击
DdoS的攻击方式有很多种,最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。
Ddos攻击利用的就是合理的服务请求,所以但凡网站都存在这一风险。既然不可避免,就加强防御吧。
文件上传漏洞
文件上传漏洞指攻击者利用程序缺陷绕过系统对文件的验证与处理策略将恶意程序上传到服务器并获得执行服务器端命令的能力。
常见方式有:
上传web脚本程序,使web容器解释执行上传的文件;
病毒、恶意程序,并诱导用户下载执行;
包含脚本的图片,某些浏览器低版本会执行。
试验:假设存在一个含有上传文件功能的系统;首先,编写一个含有特殊代码的jsp文件,命名为del.jsp,代码如下
<%@page import="java.io.File"%>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%
String root = request.getServletContext().getRealPath("");
out.write("系统路径:"+root);
%>
然后,将这个文件使用发布的系统上传到服务器,直接访问上传的文件,结果如下:读取到了当前系统的发布路径。
假设我们已知了系统中某一文件的路径、命名,添加如下代码
<%@page import="java.io.File"%>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%
String root = request.getServletContext().getRealPath("");
out.write("系统路径:"+root);
File file = new File(root+"/resource/images/0.GIF");
out.write("</br>删除的文件"+file);
file.delete();
%>
再次上传,访问文件,结果
查看服务器发布路径,会发现0.GIF文件已被删除。
这只是上传文件漏洞的一种表现,可能造成的影响还有系统文件被下载、文件被替换,甚至对服务器造成影响。利用方式很多种,防范时只要抓住关键点就能解决问题。比如
阻止非法文件上传,通过限制上传文件的格式等等。
阻止非法文件被执行,存储目录与发布站点隔离、控制可执行权限等等。
XSS 跨站攻击
xss跨站攻击即跨站脚本攻击,百度百科中介绍如下:用户在浏览网站、使用即时通讯软件、甚至在阅读电子邮件时,通常会点击其中的链接。攻击者通过在链接中插入恶意代码,就能够盗取用户信息。攻击者通常会用十六进制(或其他编码方式)将链接编码,以免用户怀疑它的合法性。网站在接收到包含恶意代码的请求之后会产成一个包含恶意代码的页面,而这个页面看起来就像是那个网站应当生成的合法页面一样。许多流行的留言本和论坛程序允许用户发表包含HTML和javascript的帖子。假设用户甲发表了一篇包含恶意脚本的帖子,那么用户乙在浏览这篇帖子时,恶意脚本就会执行,盗取用户乙的session信息。
假如攻击者发布了一段包含如下代码的链接
<input type="button" value="button" onclick="alert('哈哈,你要被攻击了')"/>
不明真相的普通用户点击了这个按钮,结果
同样,嵌入的代码可以获取cookie等信息,那么普通用户的信息就被攻击者获取达到攻击的目的。
防范:来自应用安全国际组织OWASP的建议,对XSS最佳的防护应该结合以下两种方法:验证所有输入数据,有效检测攻击;对所有输出数据进行适当的编码,以防止任何已成功注入的脚本在浏览器端运行。
输入验证:某个数据被接受为可被显示或存储之前,使用标准输入验证机制,验证所有输入数据的长度、类型、语法以及业务规则。
输出编码:数据输出前,确保用户提交的数据已被正确进行entity编码,建议对所有字符进行编码而不仅局限于某个子集。
跨站请求伪造
跨站请求伪造(Cross-site request forgery)也被称为one-click attack或者session riding,通常缩写为CSRF或者XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
实例参考跨站请求伪造CSRF
SQL 注入
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。