SQL注入

SQL注入是服务端的安全问题,注入攻击的本质,是把用户输入的数据当做代码执行。这里有两个关键条件,第一个是用户能控制输入,

第二个是原本程序要执行的代码拼接了用户输入的数据。

例如:

正常情况下,用户输入查询条件“上海”时,sql语句是“select * from city where name = ‘上海’”,当用户输入“上海‘;drop table city”,那么

sql语句就会变成“select * from city where name = ‘上海’; drop table city”。这样就会把表city删除。

如果web网站开启了错误回显功能,把错误信息展示到网页上,那么黑客容易发现数据库的信息,容易给黑客构造sql注入攻击。所以应该不显示具体的错误信息

SQL注入的防御

1. 对用户输入的值查找下有没有insert, delete, drop等关键词。

2. 检查数据类型,比如手机号是11位的,数值类型,邮件地址的格式等。

3. 使用预编译的语句,绑定变量。在使用参数化SQL查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,

而是在数据库完成 SQL 指令的编译后,才套用参数运行,因此就算参数中含有恶意的指令,由于已经编译完成,就不会被数据库所运行,因此,可从一定程度上避免SQL注入。

4. 使用存储过程,因为存储过程与预编译语句类似,区别是存储过程需要先将sql语句定义在数据库中。

总结,在对抗注入攻击时,需要牢记“数据与代码分离原则”,在“拼凑”发生时进行安全检查,就能避免此类问题。


文件上传漏洞

文件上传漏洞是指当用户上传了一个可执行的脚本文件,并通过此脚本获得了执行服务器端命令的能力。

文件上传功能是一个很正常的业务需求,但是漏洞在文件上传后,服务器怎么处理,解释服务器文件。

例如:

上传文件是web脚本语言,服务器web容器解释并执行了用户上传的脚本

上传文件是病毒,木马等,黑客诱骗用户或管理员下载执行

IIS下的文件解析问题

例如,首先用户提交了abc.asp;xx.jpg的图片,然后用户请求http://www.***.com/path/abc.asp;xx.jpg以获取图片,

但是IIS把abc.asp;xx.jpg会将此文件名解析为abc.asp,文件名被截断了,导致脚本被执行。当然这种情况得web服务器上存在这样路径的文件。

如何设计安全的文件上传功能

1. 文件上传的目录设置为不可执行。

2. 判断文件类型,可以结合使用mime type,后缀检查等方式。在文件检查中使用白名单。

3. 使用随机数改写文件名和文件路径。

4. 单据设置文件服务器的域名,因为浏览器同源策略的关系,一系列的客户端攻击将失效。


DDOS攻击(ddos是利用合理的请求,造成资源过载,导致服务不可用)

网络层DDOS

SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。TCP是基于连接的,为了在服务端和客户端之间传送TCP数据,必须先建立一个虚拟电路,也就是TCP连接,建立TCP连接的过程是:第一步,客户主机向服务器发送一个包含SYN标志的TCP报文初始化连接,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号,客户时间戳的值等信息;第二步,服务器在收到客户端的SYN报文后,设置ACK位,同时TCP序号被加一,这说明服务器接受了客户的连接请求,服务器将返回一个SYN+ACK的报文给客户端,表示客户端的请求被接受,ACK即确认(Acknowledgement)。第三步,客户端也设置ACK位,返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。以上的连接过程在TCP协议中被称为三次握手(Three-way Handshake)。而洪水攻击就是利用了这三次握手的信息交互特性。在TCP连接的三次握手中,假设一个客户端向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出应答SYN+ACK报文后将是无法收到客户端的ACK回应报文的,这样第三次握手将无法完成,在设计TCP时,由于考虑到数据包有可能在传输过程中丢失或传错方向,服务器端一般会重试,再次发送SYN+ACK回应报文给客户端,并等待一段时间,同时把其内存用在等待来自源地址的ACK上,这段等待时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的内存资源,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。如果服务器的TCP/IP栈不够充足,最后的结果往往是堆栈溢出崩溃,服务器端也将忙于处理攻击者伪造的TCP半连接请求而无暇顾及客户的正常连接请求,此时从正常客户的角度看来,服务器失去响应而瘫痪,这种情况被称为服务器端受到了SYN Flood攻击。

对抗SYN Flood的主要措施有SYN Cookie/SYN Proxy等算法,SYN Cookie的主要思想是为每一个ip地址分配一个cookie,并统计每个ip访问的频率,如果再短时间内收到大量来自同一个ip的数据包,则认为收到攻击,之后来自这个ip的数据包将被丢弃。

应用层DDOS

应用层DDOS攻击是针对服务器性能的攻击,黑客可以通过入侵一个流量很大的网站后,通过篡改页面,将巨大的用户流量分流到目标网站实施攻击。

如何应对应用层DDOS攻击

1. 首先是优化服务端性能,比如将高频率的数据刚在redis中。

2. 使用验证码,但是会影响用户体验

3. 使用Http头中的User-Agent字段来判断客户端,但是不是很安全,因为User-Agent可以被客户端篡改。

4. 一种比较可靠的方法,让客户端执行一段js,并给出正确的结果,因为大部分自动化脚本是通过直接构造http包完成的,并非在浏览器环境下发起的请求,

不能执行js,这样就可以判断出客户端到底是不是浏览器。

5. 通过记录ip的请求频率,进行拦截




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值