1.常见网络攻击
1.SQL注入 2.CSRF攻击 3.XSS攻击 4.Dos攻击
1.SQL注入
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,
攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,
在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,
从而进一步得到相应的数据信息
场景:
比如:服务器中有条查询语句为:select * from user where username=?;
攻击者可以填入 1 or 1=1
这样整条查询语句为:select * from user where username=1 or 1=1;
本来程序的愿意是根据用户名查询指定用户,但是现在能够查询出所有用户
解决办法:
1.可以使用PreparedStatement类
预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可:
String sql= "select* from users where username=?andpassword=?;
PreparedStatement preState= conn.prepareStatement(sql);
preState.setString(1, userName);
preState.setString(2, password);
ResultSet rs= preState.executeQuery();
2.现在大部分orm框架都解决了这个问题,如:ibatis、mybatis、springdatajpa等,正常使用即可
2.CSRF攻击
CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,
该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,
从而在并未授权的情况下执行在权限保护之下的操作,有很大的危害性
解决办法:
1.如果是post请求可以添加隐藏域,这种适用于后端渲染页面
比如:一个用户进入一个表单提交页面之前,服务端先生成一个token,保存在服务端, 之后将该token以隐藏域的形式写入该表单项,这样用户在提交表单时也会连同 隐藏域一起提交,后端拿到隐藏域的token与服务器进行对比,如果不一致说明 是非法请求
2.可以使用自定义请求头保存登录token,用户登录成功后在服务端验证token的有效性
原理:CSRF攻击主要是依赖cookie实现的,避免将身份信息放入cookie,用自定义请求头 的形式就可以了
3.XSS攻击
XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标 用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了。
通俗的说:就是利用非法注入src、script、img 等恶意代码执行
例子:留言板XSS,用户提交一条包含XSS代码的留言存储到数据库,目标用户查看留言板时, 那些留言的内容会从数据库查询出来并显示,浏览器发现有XSS代码,就当做正常的 HTML与Js解析执行,于是触发了XSS攻击
防御方法:
HttpOnly防止劫取Cookie
原理:浏览器会禁止页面的Javascript访问带有HttpOnly属性的Cookie
输入检查
原理:输入检查一般是检查用户输入的数据中是否包含一些特殊字符, 如<、>、'、"等,如果发现存在特殊字符,则将这些字符过滤或者编码
输出检查
原理:将不可信的值输出 URL参数之前,进行 URLEncode操作,而对于从URL参数中 获取值一定要进行格式检测(比如你需要的时URL,就判读是否满足URL格式)
不要使用 Eval来解析并运行不确定的数据或代码,对于 JSON解析请使用 JSON.parse() 方法
4.DOS 攻击 和 DDOS
DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,
其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络宽带攻击
和连通性攻击
例子:恶意程序短时大量请求web服务器,使web服务器不能正常工作,拒绝服务。
DDOS 其实就是分布式的Dos攻击,Dos单机攻击的话可能效果不明显,
分布式大量电脑同时攻击危害更大
防御:防火墙层面,同一ip短时大量请求,封禁ip处理
Last updated
Was this helpful?