工作记录(20190222)

以下问题均出现在集团对项目的安全检测中,以前一直以为安全问题离我很远,自己代码的不会出安全性问题,结果却不是这样。

1.SQL注入

简单来说,SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。问题出现于集团对项目做的第一次安全检测,发现项目中有大量的接口被SQL注入攻击,这让我很吃惊,本以为使用了框架,不会犯这样比较低级的错误,但检查了下代码,漏洞的确很多。解决方案主要是使用预编译的SQL语句,在Hibernate不要使用append直接拼接参数而是使用SqlQuery.setString等 类似方法设置参数,Mybaitis中使用#而不是$,特别注意,在类似Select * From table where table_id in ('1', '2'); 这样的语句的时候,Mybaitis的Mapper.xml可以使用foreach关键字来循环添加in条件的数据,而不是在后台拼接好查询条件再用$。当然也有一些取巧的方法来应对SQL注入,比如写个工具类检查参数

/**
 * 敏感词过滤工具
 */
public class SensitiveWordsUtil {

	/** 查找注释符 和 单双引号 */
	public static Pattern SQL_SENSITIVE_WORDS_PATTERN = Pattern.compile("--|\'|\"");
	
	/**
	 * 检查字符串安全性是否能够拼凑成SQL
	 * 
	 * @param string
	 * @return
	 */
	public static boolean findSQLSensitiveWords(String string) {
		if (StringUtils.isBlank(string)) {
			return false;
		}
		return SQL_SENSITIVE_WORDS_PATTERN.matcher(string.trim()).find();
	}
}

附上其中一部分检测报告

2.XSS注入

XSS攻击全称跨站脚本攻击,攻击模式为利用漏洞将代码植入到提供给其它用户使用的页面中。简单来讲,你有一个注册页面需要填写用户的姓名年龄,有人恶意将姓名一栏填上<img src=x οnerrοr=alert('惊不惊喜!')>,后台管理人员在查看新增用户列表的时候就会弹出弹框。当然以上只是简单举例,如果你的接口暴露出去了,即攻击者绕过了前段检测,后端又没有相关检测的话,后果不堪设想,提供一个简单的Demo的前后端代码。这里涉及到HTML页面转义字符的知识,解决方法也比较简单,即不要偷懒增加后端的参数校验。

@Controller
@RequestMapping("test")
public class TestController {
    
    @RequestMapping("testxss.do")
    public String testXss(HttpServletRequest req, HttpServletResponse resp) {
        // 可以分别放开注释看页面效果
//    	  String xss = "<img src=x onerror=alert('xss')>";
//        String xss = "&#60;img src=x onerror=alert('xss')&#62;";
        req.setAttribute("xss", xss);
        return "index";
    }
}
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
System.out.println("basePath:" + basePath);
%>
<!DOCTYPE html><html>
  <head>
    <base href="<%=basePath%>">
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
    show &#36;{xss} : ${xss}
  </body>
</html>

附上其中一部分检测报告

3.权限控制

我们系统的权限控制是由集团权限管理系统(PMS)统一控制的,在登陆时候,我们拉取登录用户的权限,但是PMS系统返回的数据仅仅包括用户可以看见的菜单列表,没有直接返回用户的角色数据,即比如权限比较低的用户登录系统只能看到客户列表,订单列表,基础数据列表等几个菜单栏,而超级管理员登录进来后则可以看到系统用户管理,权限分配等菜单。在这次检测中,集团安全组同事成功使用低权限用户访问高权限的页面,甚至某些按钮的URL,改变了系统数据。也就是说如果我们系统上线,比较关键的接口暴露出去了后果不堪设想。长久的解决方案当让是希望集团系统开放更多的数据给到我们,我们能够做到精准的权限控制。临时的解决方案是,增加一个权限过滤器,用户访问页面URL时候,认证该URL是否在他的权限数据里面,如果用户访问按钮URL(即数据接口),拿到HTTP头部的REFER字段,判定该请求来自哪个页面,再判定用户是否有该页面URL权限。

附上其中一部分检测报告

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、workbook,一个可以记录、管理、查询、统计工作日志的小工具。 2、运行在命令行模式下,不用鼠标即可完成全部操作。 3、可以记录每天的工作内容,并对工作内容可以进行增删改操作。 4、可以对工作内容进行查询和统计,比如在某一段时间内,你都做了哪些工作?这些工作各占用了你多少时间?该工作在你的工作时间内占用了多大的比例? 等等。 5、工作内容包括:工作类别、工作开始日期、工作结束日期、工作时长、工作内容 6、对每个工作内容强制进行分类,分类的类别完全自定义 7、对每个工作内容,需要提供该工作共花费了你多少时间,也就是工作时长;该时长不要求是非常精确,你可以给出一个大约值,当然,越精确越好。 也可以不提供时长,但是如果没有提供时长,则被认为该工作是没有完成的。你可以在工作还没有完成时记录一下日志,然后再完成以后记录一下时长。 8、工作的状态分为完成和未完成,完成的工作记录完成时的日期。 9、提供登录密码功能来保护隐私安全,可以修改密码,可以初始化密码,初始密码为:123456,请及时修改密码。 10、该软件使用JAVA语言编写,数据库使用的是H2。数据文件的名称为workbookdb.h2.db,该文件记录了所有的工作日志,所以请及时备份该文件。 11、该工具不需要安装,所有文件都必须放在同一个目录下才能运行。 12、由于本工具使用JAVA语言编写,请把JRE整个文件夹拷贝到该工具的同一个目录下,再运行本工具。 13、本工具分为2个版本:windows版本、Linux版本。windows版本请运行workbook.bat;Linux版本请运行workbook.sh,如果没有权限,请赋权后执行。 14、如果有问题,欢迎在作者的博客中留言交流:http://blog.csdn.net/dbsync/article/details/11267233 运行方法:首先拷贝JRE整个目录,放到本工具的目录下,然后windows上运行workbook.bat;linux上运行workbook.sh 初始密码:123456 作者:滴石水
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值