WatchDogs

Knowledge of Backend Development

0%

常见的Web开发安全问题

SQL注入

SQL注入的本质是定义好的查询语句的结尾上添加额外的SQL语句。一般攻击者可以在http的请求参数中加入额外的SQL语句,有一些参数可能用于SQL查询,若后端SQL查询语句仅仅是简单的字符串拼接,那么攻击者加上的额外的SQL语句很可能起作用。这种手段可以在不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息

预防:
1.输入校验,限制长度,转移特殊字符:单引号,双”-“。
2.不能动态拼接sql,使用参数化查询或存储过程查询。MyBatis参数化查询
3.web应用不要使用管理员权限连接数据库,为每个应用使用单独的权限有限的数据库连接。
4.不要明文存储机密信息,加密或者hash掉密码和敏感的信息。
5.系统错误信息不要直接提供给用户,可以进行包装。
6.使用第三方SQL注入检测工具

示例:
代码:

1
ResultSet resultSet = statement.executeQuery("select * from account where id = " + id + " and password =   " + password +";");

运行结果:

形象化:
SQL注入就像是派了一个间谍会计师,到敌人的金库里面瞎搞。

XSS

注入恶意指令代码到网站,使用户加载并执行攻击者恶意制造的网页程序

持久型与非持久型的区别:
持久型:恶意代码被当做数据写入到数据库,有可能在未来的会话中被读取
非持久型:恶意代码作为参数发往后端,后端把参数当做网页的一部分,返回给前端

示例:
当我们在网站上显示用户名的时候正常是这样的:
<div> 用户名:username</div>
如果用户名嵌入了恶意代码,则会使这样的
<div> 用户名:<iframe src="恶意操作地址"></iframe></div>

手段与目的:
1、盗用cookie,获取敏感信息。
2、利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
3、利用iframe、frame中的src,JS的XMLHttpRequest,冒充用户的身份对指定地址进行请求,执行未经用户授权的操作,如发微博、加好友、发私信等。
4、利用被攻击的域,访问一些信任被攻击域的域(XSS+CSRF),如进行不当的投票活动。
5、在访问量极大的一些页面上植入代码,大量用户访问后,对小网站进行请求,实现DDoS攻击。

解决:
1输入过滤,2输出3过滤(1次,多次,过滤出错)

形象化:
XSS就像是派了一个间谍到敌人内部去获取信息,有时候还会回来跟我军交换情报。

CSRF攻击

跨域请求:地址栏的域名是aaa.com,但是js中的xmlhttp,或者html中的src属性却请求一个bbb.com的资源

除非目标资源是公共资源,否则,第三方网页上可能会出现的一些目标系统(域)的一些敏感接口,让浏览器对该接口进行请求,服务器收到请求进行敏感操作,而目标系统会误以为是用户的真实操作,而去执行命令。
前提条件是:用户自己曾经认证访问过的网站,这样才能拿到用户cookie或sessionid。如果请求的是公共资源则害处不大,但是无意义的请求公共资源可能造成目标系统资源浪费,性能下降。

  • 敏感-src
  • 继承Cookie

黑客发起CSRF攻击的条件

  • 目标网站一定要有CSRF漏洞,黑客破解了服务器的接口
  • 用户登录过目标网站,并且浏览器保存目标网站的登录状态
  • 用户在同一浏览器下以某种方式打开了黑客的网站或者是攻击的链接
    危害:在用户无意识情况下进行危险操作

解决方法:

  • 忽略所有外域请求
  • 增加token验证,判断post,获取from中的数据

示例
受害者 Bob 在银行有一笔存款,通过对银行的网站发送请求 http://bank.example/withdraw?account=bob&amount=1000000&for=bob2 可以使 Bob 把 1000000 的存款转到 bob2 的账号下。通常情况下,该请求发送到网站后,服务器会先验证该请求是否来自一个合法的 session,并且该 session 的用户 Bob 已经成功登陆。

黑客 Mallory 自己在该银行也有账户,他知道上文中的 URL 可以把钱进行转帐操作。Mallory 可以自己发送一个请求给银行:http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory。但是这个请求来自 Mallory 而非 Bob,他不能通过安全认证,因此该请求不会起作用。

这时,Mallory 想到使用 CSRF 的攻击方式,他先自己做一个网站,在网站中放入如下代码: src=”http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory ”,并且通过广告等诱使 Bob 来访问他的网站。当 Bob 访问该网站时,上述 url 就会从 Bob 的浏览器发向银行,而这个请求会附带 Bob 浏览器中的 cookie 一起发向银行服务器。大多数情况下,该请求会失败,因为他要求 Bob 的认证信息。但是,如果 Bob 当时恰巧刚访问他的银行后不久,他的浏览器与银行网站之间的 session 尚未过期,浏览器的 cookie 之中含有 Bob 的认证信息。这时,悲剧发生了,这个 url 请求就会得到响应,钱将从 Bob 的账号转移到 Mallory 的账号,而 Bob 当时毫不知情。等以后 Bob 发现账户钱少了,即使他去银行查询日志,他也只能发现确实有一个来自于他本人的合法请求转移了资金,没有任何被攻击的痕迹。而 Mallory 则可以拿到钱后逍遥法外。

形象化:
我军向敌军派遣人员进行军表面上事交流,实际上进行间谍活动。

DDOS

攻击方式

1、SYN Flood攻击
利用TCP三次握手,攻击方对目标系统发送SYN,目标系统会返回SYN和ACK,但攻击系统不会返回第三次握手,或者攻击者在第一次握手的时候直接对IP地址造假,这样攻击系统甚至不会收到第二次握手的报文。利用大量的节点对目标系统进行SYNFlood,则会浪费目标系统的资源,使正常的TCP无法连接

形象化:
就像狼来了,一群小孩对一个比较蠢的猎人喊狼来了,猎人尽最大努力保护每一个小孩,但是猎人能力有限,则无法保护真正要保护的小孩。

2、UDP Flood攻击
UDP Flood是日渐猖厥的流量型DDoS攻击,原理也很简单。常见的情况是利用大量UDP小包冲击DNS服务器或Radius认证服务器、流媒体视频服务器。由于UDP协议是一种无连接的服务,在UDP Flood攻击中,攻击者可发送大量伪造源IP地址的小UDP包。 UDP攻击是一种消耗对方资源,同时也消耗攻击者本身的资源的攻击方式

3、ICMP Flood攻击
ICMP Flood攻击属于流量型的攻击方式,是利用大的流量给服务器带来较大的负载,影响服务器的正常服务。由于目前很多防火墙直接过滤ICMP报文。因此ICMP Flood出现的频度较低。[7]大量ping包

4、Connection Flood攻击
Connection Flood是典型的利用小流量冲击大带宽网络服务的攻击方式,这种攻击的原理是利用真实的IP地址向服务器发起大量的连接。并且建立连接之后很长时间不释放,占用服务器资源,当连接数达到一定规模,超过了服务器的能力时,正常的连接请求将无法建立

5、HTTP Get攻击
这种攻击主要是针对存在ASP、JSP、PHP、CGI等脚本程序,特征是和服务器建立正常的TCP连接,并不断的向脚本程序提交查询、列表等大量耗费数据库资源的调用

HTTP协议规定,HTTP Request以\r\n\r\n(0d0a0d0a)结尾表示客户端发送结束,服务端开始处理。那么,如果永远不发送\r\n\r\n会如何?Slowloris就是利用这一点来做DDoS攻击的。攻击者在HTTP请求头中将Connection设置为Keep-Alive,要求Web Server保持TCP连接不要断开,随后缓慢地每隔几分钟发送一个key-value格式的数据到服务端,如a:b\r\n,导致服务端认为HTTP头部没有接收完成而一直等待。如果攻击者使用多线程或者傀儡机来做同样的操作,服务器的Web容器很快就被攻击者占满了TCP连接而不再接受新的请求。

6、UDP DNS Query Flood攻击
UDP DNS Query Flood攻击采用的方法是向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络世界上根本不存在的域名。域名解析的过程给服务器带来了很大的负载,每秒钟域名解析请求超过一定的数量就会造成DNS服务器解析域名超时。

什么是对称加密、非对称加密?区别是什么?
展开
  • 对称加密:加密和解密采用相同的密钥。如:DES、RC2、RC4
  • 非对称加密:需要两个密钥:公钥和私钥。如果用公钥加密,需要用私钥才能解密。如:RSA
  • 区别:对称加密速度更快,通常用于大量数据的加密;非对称加密安全性更高(不需要传送私钥)
数字签名、报文摘要的原理
展开
  • 发送者A用私钥进行签名,接收者B用公钥验证签名。因为除A外没有人有私钥,所以B相信签名是来自A。A不可抵赖,B也不能伪造报文。
  • 摘要算法:MD5、SHA