互联网安全
前段时间公司请来了专门做安全的人给我们讲解互联网安全,收益匪浅,原来我们规避的只是大部分漏洞,还有一小部分是有机可乘,不过也不一定,这一定要前端和后端的同学一起协作,在各自的入口做好校验,最近太忙,就没有记录下来,今天抽个时间把这些都记录下来,同时向这位大神致敬,讲的很有意思
一、规避SQL注入
- 严格先定参数类型
- 明确参数检验的边界
- 采用参数化查询的方法(推荐)
- 内置过滤系统
错误代码
String username = request.getParameter("username");
String password = request.getParameter("password");
String query = "SELECT id FROM users WHERE username ="+ username +"AND password="+ password;
Statement stmt = con.createStatement(query);
ResultSet rs = con.executeQuery(query);
正确代码
String username = request.getParameter("username");
String password = request.getParameter("password");
String query = "SELECT id FROM users WHERE username =? AND password= ?";
Statement stmt = con.createStatement(query);
stmt.setString(1,username)
stmt.setString(2,password)
二、xss(cross-site scripting跨域脚本攻击)攻击是最常见的Web攻击,其重点是“跨域”和“客户端执行”。有人将XSS攻击分为三种,分别是:
具体看文章 前端安全之XSS攻击
1. Reflected XSS(基于反射的XSS攻击)
基于反射的XSS攻击,主要依靠站点服务端返回脚本,在客户端触发执行从而发起Web攻击。
2. Stored XSS(基于存储的XSS攻击)
基于存储的XSS攻击,是通过发表带有恶意跨域脚本的帖子/文章,从而把恶意脚本存储在服务器,每个访问该帖子/文章的人就会触发执行。
3. DOM-based or local XSS(基于DOM或本地的XSS攻击)
基于DOM或本地的XSS攻击。一般是提供一个免费的wifi,但是提供免费wifi的网关会往你访问的任何页面插入一段脚本或者是直接返回一个钓鱼页面,从而植入恶意脚本。这种直接存在于页面,无须经过服务器返回就是基于本地的XSS攻击。
xss盲打后台具体的一个案例! 新浪微博遭XSS攻击事件始末分析
结论:
这攻击其实跟网站本身没有什么关系,只是数据被中间人获取了而已,而由于HTTP是明文传输的,所以是极可能被窃取的。
开发安全措施:
1. 使用HTTPS!就跟我前面《HTTP与HTTPS握手的那些事》这篇文章说的,HTTPS会在请求数据之前进行一次握手,使得客户端与服务端都有一个私钥,服务端用这个私钥加密,客户端用这个私钥解密,这样即使数据被人截取了,也是加密后的数据。
三、CSRF攻击原理及防御
CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具危险性。想要深入理解CSRF的攻击特性我们有必要了解一下网站session的工作原理。
我们知道http请求是无状态的,也就是说每次http请求都是独立的无关之前的操作的,但是每次http请求都会将本域下的所有cookie作为http请求头的一部分发送给服务端,所以服务端就根据请求中的cookie存放的sessionid去session对象中找到该会员资料了。
当然session的保存方法多种多样,可以保存在文件中,也可以内存里,考虑到分布式的横向扩展我们还是建议把它保存在第三方媒介中,比如redis或者mongodb。
CSRF防御
通过 referer、token 或者 验证码 来检测用户提交。
尽量不要在页面的链接中暴露用户隐私信息。
对于用户修改删除等操作最好都使用post 操作 。
避免全站通用的cookie,严格设置cookie的域。
具体还有很多,由于时间太久远了,大概还有几个点记不太清楚了。。。。
上一篇: 质数因子
下一篇: 判断设备是否真正的连接互联网