常见的Web网站防御攻击方法

本文详细介绍了互联网常见的安全攻击,如XSS跨站脚本攻击和SQL注入,并提供了相应的防御措施。针对XSS,提出了输入验证、强壮的输出编码、指定输出编码方式等方法。对于SQL注入,解释了其原理和危害,并给出了防止目录递归、判断请求来源等防范手段。此外,还讨论了文件上传漏洞、不安全的链接及其处理方式,以及如何防止跨站伪造请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.xss跨站脚本攻击

	1)输入验证:某个数据被接受为可被显示或存储之前,使用标准输入验证
	机制,验证所有输入数据的长度、类型、语法以及业务规则。
	2)强壮的输出编码:数据输出前,确保用户提交的数据已被正确进行
	entity 编码,建议对所有字符进行编码而不仅局限于某个子集。
	3)明确指定输出的编码方式(如 ISO 8859-1 或 UTF 8):不要允许攻击
	者为你的用户选择编码方式。
	4)注意黑名单验证方式的局限性:仅仅查找或替换一些字符(如"<" ">"或
	类似"script"的关键字),很容易被 XSS 变种攻击绕过验证机制。
	5)警惕规范化错误:验证输入之前,必须进行解码及规范化以符合应用程
	序当前的内部表示方法。请确定应用程序对同一输入不做两次解码。

2.未授权访问

    1) 做好对用户与所拥有权限的验证
	2) 所有访问系统的请求,首先验证是否是合法有效用户。如不是则跳转到
	登录页面。
	3) 严格验证用户 session 是否有效,如果无效从后台跳转到登录页面。
	4) 重要数据操作功能要使用 token。

3.登录处明文传输

   使用 SSL 方式加密或发送重要信息前对信息加密
   申请证书  https  方式访问。

4.文件上传漏洞

   上传时,检查上传文件的文件头,非授权文件类型的文件,禁止上传。如:建一个txt文件,改为test.jpg,即可上传,这些上传方式是不允许的。
// 文件后缀名
        String fileName=file.getOriginalFilename();
        String fileNamefix= fileName.substring(fileName.lastIndexOf(".") + 1);

        if(!"png".equals(fileNamefix) && !"jpg".equals(fileNamefix) && !"gif".equals(fileNamefix) && !"bmp".equals(fileNamefix)){
            throw new RczpException("请上传正确的.jpg、.png、.gif、.bmp格式的图片");
        }

        String mineType=mineType(file);

        //文件后缀不是.jpg;.png;.bmp;.gif
        if(!"image/jpeg".equals(mineType)&&!"image/png".equals(mineType)&&!"image/x-ms-bmp".equals(mineType)&&!"image/gif".equals(mineType)){
            throw new RczpException("请上传正确的.jpg、.png、.bmp、.gif格式的图片");
        }

        //文件大小大于1MB
        if(file.getSize()>(1024*1000)){
            throw new RczpException("文件不能超过1.00MB");
        }

import org.springframework.web.multipart;
import eu.medsea.mimeutil;
private String mineType(MultipartFile f) {

        String mineType="";

        MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
        try {
            mineType=MimeUtil.getMimeTypes(f.getBytes()).toString();
        } catch (IOException e) {
            e.printStackTrace();
            mineType="";
        }

        return mineType;
    }

5.跨站伪造请求

	1、禁止目录递归,如过滤 ../ 或 ../../ 。
	2. 判断请求来源
public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws ServletException, IOException {  
        HttpServletRequest request = (HttpServletRequest) req;  
        HttpServletResponse response = (HttpServletResponse) res;  
        // 链接来源地址  
        String referer = request.getHeader("referer");  
        String RequestURL = request.getRequestURI();
        if(!RequestURL.equals("/wcm/app/login.jsp")){
        	if(referer == null){
        		/** 
                 * 如果 链接地址来自其他网站,则返回错误页面 
                 */  
                request.getRequestDispatcher("/WEB-INF/error.html").forward(request, response);  
        	}else{
        		if (!referer.contains(request.getServerName())) {  
	                /** 
	                 * 如果 链接地址来自其他网站,则返回错误页面 
	                 */  
	            	 System.out.println("伪来源地址");
	                request.getRequestDispatcher("/WEB-INF/error.html").forward(request, response);  
	            } else {   
	                chain.doFilter(request, response);  
	            } 
        	}
        }else{
        	 chain.doFilter(request, response);  
        }
    }

6.不安全的链接

添加rel="noopener noreferrer nofollow"
<a href="https://test.com" target="_blank" rel="noopener noreferrer nofollow">test</a>

7.典型漏洞介绍

7.1XSS跨站脚本攻击

	漏洞成因
	是因为WEB程序没有对用户提交的变量中的HTML代码进行过滤或转换。
	漏洞形式
	这里所说的形式,实际上是指WEB输入的形式,主要分为两种:
	1.显示输入
	2.隐式输入
	其中显示输入明确要求用户输入数据,而隐式输入则本来并不要求用户输入数据,但是用户却可以通过输入数据来进行干涉。
	显示输入又可以分为两种:
	1.输入完成立刻输出结果
	2.输入完成先存储在文本文件或数据库中,然后再输出结果
	注意:后者可能会让你的网站面目全非!
	而隐式输入除了一些正常的情况外,还可以利用服务器或WEB程序处理错误信息的方式来实施。
	漏洞危害
	比较典型的危害包括但不限于:
	获取其他用户Cookie中的敏感数据
	屏蔽页面特定信息
	伪造页面信息
	拒绝服务攻击
	突破外网内网不同安全设置
	与其它漏洞结合,修改系统设置,查看系统文件,执行系统命令等
	其它
	一般来说,上面的危害还经常伴随着页面变形的情况。而所谓跨站脚本执行漏洞,也就是通过别人的网站达到攻击的效果,也就是说,这种攻击能在一定程度上隐藏身份。

7.2SQL INJECTION数据库注入攻击

	SQL Injection定义
	所谓SQL Injection ,就是通过向有SQL查询的WEB程序提交一个精心构造的请求,从而突破了最初的SQL查询限制,实现了未授权的访问或存取。
	SQL Injection原理
	随着WEB应用的复杂化,多数WEB应用都使用数据库作为后台,WEB程序接受用户参数作为查询条件,即用户可以在某种程度上控制查询的结果,如果WEB程序对用户输入过滤的比较少,那么入侵者就可能提交一些特殊的参数,而这些参数可以使该查询语句按照自己的意图来运行,这往往是一些未授权的操作,这样只要组合后的查询语句在语法上没有错误,那么就会被执行。
	SQL Injection危害
	SQL Injection的危害主要包括:
	1.露敏感信息
	2.提升WEB应用程序权限
	3.操作任意文件
	4.执行任意命令
	SQL Injection 技巧
	利用SQL Injection的攻击技巧主要有如下几种:
	1.逻辑组合法:通过组合多种逻辑查询语句,获得所需要的查询结果。
	2.错误信息法:通过精心构造某些查询语句,使数据库运行出错,错误信息中包含了敏感信息。
	3.有限穷举法:通过精心构造查询语句,可以快速穷举出数据库中的任意信息。
	4.移花接木法:利用数据库已有资源,结合其特性立刻获得所需信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值