案例:①HTTP://xxx.xxx.xxx/abc.asp?p=YY’(附加一个单引号), abc.asp运行异常,表示没有对特殊字符进行转义或过滤。
③HTTP://xxx.xxx.xxx/abc.asp?p=YY and 1=2, abc.asp运行异常;
常见的不安全写法:
Statement s = connection.createStatement();
ResultSet rs = s.executeQuery("SELECT email FROM member WHERE name = " + formField);
安全写法
PreparedStatement ps = connection.prepareStatement(
"SELECT email FROM member WHERE name = ?");
ps.setString(1, formField);
ResultSet rs = ps.executeQuery();
解决:
白名单验证:比如id值,那么我们判断它是否为数字。
黑名单验证:使用正则表达式禁止使用某些字符和字符串
案例:页面搜索框输入"/><script>alert("这是一个反射型xss攻击")</script>后点击搜索,会提示提示框
存储式XSS攻击
一般是在提交表单式的请求中,注入XSS,存入服务器中,达到攻击打开的用户,影响所有看到的人。
例:新建用户,描述中输入"/><script>alert("这是一个存储型xss攻击")</script>
保存后,后面的用户打开用户管理页面,查看到刚添加的用户所在页,都会弹出提示框
解决:
3) 对数据进行Html Encode 处理
4) 过滤或移除特殊的Html标签,例如: <script>, <iframe> , < for <, > for >, " for
5) 过滤JavaScript 事件的标签。例如 "οnclick=", "onfocus" 等等。
概述:CSRF(Cross-site request forgery), 就是攻击者盗用你的身份,以你的名义发送恶意请求。
解决:
在请求地址中添加token并验证或验证码
CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,该请求中所有的用户验证信息都存在于Cookie中,因此攻击者可以在不知道这些验证信息的情况下直接利用用户自己的Cookie来通过安全验证。由此可知,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,并且该信息不存在于Cookie之中。鉴于此,系统开发者可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。
概述:
解决:
概述:
当生成web页面时,数据、应用程序和APIs经常使用对象的实名或关键字。功能、URLs和函数名称经常容易被猜解。而应用程序和APIs并不总是验证用户对目标资源的访问授权,如普通用户可以访问管理员的页面,这就导致了访问控制失效。测试者能轻易操作参数值以检测该漏洞。代码分析能很快显示应用程序是否进行了正确的权限验证。
攻击:猜一些页面的url,进行攻击。
案例:管理员页面并没有菜单管理的权限,但是却可以在浏览器中输入菜单管理的url:menu来访问菜单管理页面
解决:
检查访问。任何来自不可信源的直接对象引用都必须通过访问控制检测,确保该用户对请求的对象有访问权限。
概述:
通过SQL注入或命令执行或直接使用脚本进行爬虫,来获得用户的账号密码、实名信息泄露、行为记录等
解决:
、对于没必要存放的、重要的敏感数据,应当尽快清除。
3、确保使用了合适的强大的标准算法和强大的密匙,并且密匙管理到位。
4、确保使用密码专用算法存储密码
5、禁用自动完成防止敏感数据收集,禁用包含敏感数据的缓存页面。
6、加密传输