常见Web安全漏洞

1.web安全常见攻击手段

    xss  sql注入  防盗链  csrf  上传漏洞

2. 信息加密与漏洞扫描

  对称加密 非对称加密

3. 互联网API接口安全设计

4. 网站安全漏洞扫描与抓包分析

5. Https协议底层原理分析

6.电子商务风控与黑名单和白名单系统

 7. 基于多种手打尽防御DDS攻击

  

通过抓包分析工具 拿到token 获取令牌。

上传漏洞 如果有个 不良脚本就完蛋了 文件流需要判断哦

HTTP协议接口保证安全 微服务很多接口被调用呀

 

XSS攻击

什么是XSS攻击手段

XSS攻击使用Javascript脚本注入进行攻击

例如在提交表单后,展示到另一个页面,可能会受到XSS脚本注入,读取本地cookie远程发送给黑客服务器端。

 

<script>alert('sss')</script>

<script>window.location.href='http://www.baidu.com';</script>

对应html源代码: &lt;script&gt;alert('sss')&lt;/script&gt;

最好使用火狐浏览器演示效果   谷歌浏览器对xss有防御效果的哦

如何防御XSS攻击

将脚本特殊字符,转换成html源代码进行展示。

汉子编码http://www.toov5.com/classcode/tools/encode_gb2312.asp

步骤:编写过滤器拦截所有getParameter参数,重写httpservletwrapp方法

将参数特殊字符转换成html源代码保存.

 

直接js脚本语言 读取cookie信息,获取会话信息,然后模拟请求

   

Http请求防盗链

什么是防盗链

比如A网站有一张图片,被B网站直接通过img标签属性引入,直接盗用A网站图片展示。

 

如何实现防盗链

  判断http请求头Referer域中的记录来源的值,如果和当前访问的域名不一致的情况下,说明该图片可能被其他服务器盗用。

 

  XSS攻击使用Js脚本语言 , 因为了浏览器默认支持及哦啊本语言执行,如果在表单提交的时候,提交一些脚本参数,可能浏览器直接进行解析执行了。

  XSS攻击最大漏洞常见  论坛 BBS   在提交评论时候 页面展示时候输入脚本 别人点击时候 就会进行执行

   像一些特殊字符 比如 <  > 如果不进行特殊处理的字符处理 很快就可能受到XSS攻击

  用户如果提交< 转换  &lt; script &gt

  程序实现: 设计过滤器  拦截所有获取的参数  将特殊字符转换  比如 > 转换成 &gt 进行展示 防止 XSS攻击

 

  可以在controller里面  获取 然后进行改进:

    String  name = request.getParameter("name");

    name.replace(">","&gt");

   

直接使用第三方的转换! 第三方html特殊字符转换工具  不仅仅是>  <   还有很多的! 

汉子编码http://www.mytju.com/classcode/tools/encode_gb2312.asp

步骤:编写过滤器拦截所有getParameter参数,重写httpservletwrapp方法

将参数特殊字符转换成html源代码保存.

 

controller:

 

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class IndexController {

    @RequestMapping("/index")
    public String index() {
        return "index";
    }
}

 

重写Http工具类:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;

// 重写HttpServletRequestWrapper 防止XSS攻击  检查修改特殊字符
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
    private HttpServletRequest request;

    /**
     * @param request
     */
    public XssHttpServletRequestWrapper(HttpServletRequest request) {
        super(request);
        this.request = request;
    }

    @Override
    public String getParameter(String name) {
        // 过滤getParameter参数 检查是否有特殊字符
        String value = super.getParameter(name);
        System.out.println("value:" + value);
        if (!StringUtils.isEmpty(value)) {
            // 将中文转换为字符编码格式,将特殊字符变为html源代码保存
            value = StringEscapeUtils.escapeHtml(value);
            System.out.println("newValue:" + value);
        }
        return value;
    }

}

拦截器:

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;

import com.itmayiedu.httprequest.XssHttpServletRequestWrapper;

// 过滤器 拦截所有请求 XSS 攻击
 @WebFilter(filterName = "xssFilter", urlPatterns = "/*")
 public class XssFilter implements Filter {

 public void init(FilterConfig filterConfig) throws ServletException {

 }

 
 public void destroy() {

 }

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException {
    System.out.println("拦截器");
     HttpServletRequest req = (HttpServletRequest) request;
     XssHttpServletRequestWrapper xssHttpServletRequestWrapper = new  XssHttpServletRequestWrapper(req);
     chain.doFilter(xssHttpServletRequestWrapper, response);
    
}
 }

 

测试,窗口输入 汉字:

输入不安全的脚本代码: 直接直接起作用了

 

 

SQL注入攻击  主要就是 后台的SQL 代码 用的$ 而不是 #

Dao层的sql语句 拼接方式是避免的    要用预编译方式! 不要拼接方式!    

 

  

SQL注入攻击

什么是SQL注入

SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库执行一些恶意的

作。

造成SQL注入的原因是因为程序没有有效过滤用户的输入,使攻击者成功的向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码

SQL注入防攻击手段

不要使用拼接SQL语句方式、最好使用预编译方式,在mybatis编写sql语句的时候,最好使用?传参数方式,不要使用#传参数,因为#传参数方式,可能会受到sql语句攻击。

 

案例:

http://127.0.0.1:8080/login?userName='liusi'&password='123'

http://127.0.0.1:8080/login?userName='liusi'&password='123'  or 1=1

 

MyBatis #与?区别

#{}: 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符,可以防止SQL注入问题。

${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。

 

posted @ 2018-11-21 18:38  toov5  阅读(1208)  评论(0编辑  收藏  举报