拓展面试题之 - 安全面试题

分类: 互联网 > 面试题

1、什么是对称加密,什么是非对称加密?【概念】

对称加密:加解密用同一密钥,密钥维护复杂 n(n-1)/2,不适合互联网传输密钥,加解密效率高。应用于加密数据。 非对称加密:公钥推不出私钥,每个用户一个非对称密钥对就可以,适合于互联网传输公钥,但是加密效率低,应用于数字签名及加密。

2、什么是同源策略?【概念】

为了防止不同域在用户浏览器中彼此干扰,浏览器对从不同来源(域)收到的内容进行隔离。 浏览器不允许任何旧有脚本访问一个站点的cookie,否则,会话容易被劫持。 只有发布cookie的站点能够访问这些cookie,只有通过该站点返回的页面所包含或加载的JavaScript才能访问 cookie。

3、SYN攻击原理?

SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。 SYN攻击除了能影响主机外,还可以危害路由器、防火墙等网络系统,事实上SYN攻击并不管目标是什么系统, 只要这些系统打开TCP服务就可以实施。从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语句可控。

预防:

    1)不要随意开启生产环境中Webserver的错误显示。
    2)永远不要信任来自用户端的变量输入,有固定格式的变量一定要严格检查对应的格式,没有固定格式的变量需要对引号等特殊字符进行必要的过滤转义。
    3)使用预编译绑定变量的SQL语句,如php的PDO预编译和mysqli预编译等。【最有效】
    4)做好数据库帐号权限管理。
    5)严格加密处理用户的机密信息。

6、什么是xss攻击?如何预防?【高频】

1)什么是xss攻击?

跨站脚本攻击,xss其实也算是注入的一种,只不过属于html/js注入,注入类漏洞的都是没有对用户输入输出进行安全处理导致的。而 csrf 的话更有一种隐藏在黑暗中的刺客的感觉,而且是借刀杀人的那种,这里借的刀就是用户的会话状态(或者说cookie?),举一个例子,比如你请求了一个带有 csrf 漏洞的普通页面,可能这个页面中就有这么一段代码,这段代码就悄悄地去请求了你的博客(www.xxx.com),并且删除了id为2的文章

2)如何预防?

预防思路 web 页面中可由用户输入的地方,如果对输入的数据转义、过滤处理后台输出页面的时候,也需要对输出内容进行转义、过滤处理(因为攻击者可能通过其他方式把恶意脚本写入数据库) 前端对 html 标签属性、css 属性赋值的地方进行校验、

3)注意:

各种语言都可以找到 escapeHTML() 方法可以转义 html 字符。

7、听过盲注吗,解释一下,和报错注入、普通注入的区别?

1)盲注是猜测,然后验证

2)报错注入是故意填错,然后看到报错信息里面的关键信息

3)普通注入是拼接恶意sql

8、什么是CSRF攻击?如何预防?【高频】

CSRF(Cross-site request forgery)也被称为 one-click attack或者 session riding,中文全称是叫跨站请求伪造。 一般来说,攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。常用于盗取账号、转账、发送虚假消息等。攻击者利用网站对请求的 验证漏洞而实现这样的攻击行为,网站能够确认请求来源于用户的浏览器,却不能验证请求是否源于用户的真实意愿 下的操作行为。

1)验证请求的来源站点

在服务器端验证请求的来源站点。因为CSRF攻击大多数都是来自第三方站点。 通过http请求头中的Referer和Origin属性

    1. referer属性:记录了该http请求的来源地址,但有些场景不适合将来源URL暴露给服务器,所以可以设置不用上传,并且referer属性是可以修改的,所以在服务器端校验referer属性并没有那么可靠

    2. origin属性:通过XMLHttpRequest、Fetch发起的跨站请求或者Post方法发送请求时,都会带上origin,所以服务器可以优先判断 Origin属性,再根据实际情况判断是否使用referer判断。

2)CSRF Token 除了上面两个方法之外,还可以使用CSRF Token来验证。

    1. 在浏览器向服务器发起请求时,服务器生成一个CSRF Token(字符串)发送给浏览器,然后将该字符串放入页面中

    2. 浏览器请求时(如表单提交)需要带上这个CSRF Token。服务器收到请求后,验证CSRF是否合法,如果不合法拒绝即可。

    3. 相关接口网关只容许信任站点进来请求

3)要求用户输入验证码,比如手机短信验证码。

9、DDOS(分布式拒绝服务)是什么,如何预防? 

DDoS 攻击就是在短时间内发起大量请求,耗尽服务器的资源,无法响应正常的访问,造成网站实质下线。

DDoS 里面的 DoS 是 denial of service(停止服务)的缩写,表示这种攻击的目的,就是使得服务中断。最前面 的那个 D 是 distributed (分布式),表示攻击不是来自一个地方,而是来自四面八方,因此更难防。你关了前 门,他从后门进来;你关了后门,他从窗口跳起来。 

1)DDoS攻击如何工作?

    DDoS攻击需要攻击者控制在线计算机网络才能进行攻击。计算机和其他计算机(如物联网设备)感染了恶意软件, 将每个计算机转变为机器人(或僵尸)。然后,攻击者可以远程控制僵尸程序组,这称为僵尸网络。

    一旦僵尸网络建立,攻击者就可以通过远程控制方法向每个机器人发送更新的指令来指导机器。当受害者的IP地址被僵尸网络作为目标时,每个僵尸程序将通过向目标发送请求来响应,可能导致目标服务器或网络溢出容量,从而导致对正常流量的拒绝服务。由于每个机器人都是合法的Internet设备,因此将攻击流量与正常流量分开可能很困难。

    单个HTTP请求在客户端执行起来很便宜,并且目标服务器响应起来可能很昂贵,因为服务器通常必须加载多个文件并运行数据库查询才能创建网页。

2)DDOS攻击的特征

    攻击经常来源于一些相对固定的IP或IP段,每个IP都有远大于真实用户的连接数和请求数。【备注:这并不表明这种请求都是代表着DDOS攻击。在很多使用NAT的网络架构中,很多的客户端使用网关的IP 地址访问公网资源。但是,即便如此,这样的请求数和连接数也会远少于DDOS攻击。】

     因为攻击是由木马发出且目的是使服务器超负荷,请求的频率会远远超过正常人的请求。

    User-Agent通常是一个非标准的值伪造的ip是骗不过tcp的,能骗过udp

3)DDoS防御的方法

    硬件防火墙,充足的网络,升级主机服务器硬件,安装专业抗DDOS防火墙(安全狗,360卫士),备份网站,部署 CDN(一旦上了 CDN,千万不要泄露源服务器的 IP 地址,否则攻击者可以绕过 CDN 直接攻击源服务器),购买高防 IP(网站域名指向高防 IP,它提供一个缓冲层,清洗流量,并对源服务器的内容进行缓存),企业级 DDoS 清洗 系统架构,启用基于 sysctl 的保护,分层解决方案。

    以上就是传说中的技术不够,用钱凑。

4)其它方法及注意事项:

    使用 CSF,iptables,UFW,APF 等软件防火墙

    服务器上没用的端口一定要关掉,只对外网开放80等端口,有些重要端口,比如mysql的3306,只对指定ip白名单 (公司内部服务器的ip地址)提供访问权限。

    防止伪造IP:伪造是修改数据包。使用tcp而不是udp,TCP无法伪造IP,因为需要三次握手,比较安全;UDP可以伪 造。tcp必须使用代理ip,攻击者攻击成本高。

5)nginx防御DDOS

    1. 限制每个IP的请求速度:设置Nginx、Nginx Plus的连接请求在一个真实用户请求的合理范围内。比如,如果你觉得一个正常用户每两秒可以请求一次登录页面,你就可以设置Nginx每两秒钟接收一个客户端IP的请求(大约等同于每分钟30个请求)。

limit_req_zone $binary_remote_addr zone=one:10m rate=60r/m;
server {
    ...
    location /login.html {
        limit_req zone=one;
        ...
    }
}

limit_req_zone 命令设置了一个叫one的共享内存区来存储请求状态的特定键值,在上面的例子中是客户端 IP($binary_remote_addr)。location块中的 limit_req 通过引用one共享内存区来实现限制访问/login.html的目的。

    2. 限制连接数量:设置Nginx、Nginx Plus的连接数在一个真实用户请求的合理范围内。比如,你可以设置每个客户端IP连接/store不可以超过10个。 

limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
    ...
    location /store/ {
        limit_conn addr 10;
        ...
    }
}

limit_conn_zone 命令设置了一个叫addr的共享内存区来存储特定键值的状态,在上面的例子中是客户端IP( $binary_remote_addr)。location块中 limit_conn 通过引用addr共享内存区来限制到/store/的最大连接数为10。 

    3. 关闭慢连接:有一些DDOS攻击,比如Slowlris,是通过建立大量的连接并周期性的发送一些数据包保持会话来达到攻击目的,这 种周期通常会低于正常的请求。这种情况我们可以通过关闭慢连接来抵御攻击。 client_body_timeout 命令用来定义读取客户端请求的超时时间, client_header_timeout 命令用来定于读取客 户端请求头的超时时间。这两个参数的默认值都是60s,我们可以通过下面的命令将他们设置为5s:

server {
    client_body_timeout 5s;
    client_header_timeout 5s;
    ...
} 

    4. 设置IP黑名单:你确定攻击来源于123.123.123.3、123.123.123.5、123.123.123.7几个IP,可以这样设置:

location / {
    deny 123.123.123.3;
    deny 123.123.123.5;
    deny 123.123.123.7;
    ...
}

    5. 设置IP白名单:如果你的网站仅允许特定的IP或IP段访问,你可以结合使用allow和deny命令来限制仅允许你指定的IP地址访问你的 网站。如下,你可以设置仅允许192.168.1.0段的内网用户访问:

location / {
    allow 192.168.1.0/24;
    deny all; // deny命令会拒绝除了allow指定的IP段之外的所有其他IP的访问请求。
    ...
}

    6. 使用缓存进行流量削峰:通过打开Nginx的缓存功能并设置特定的缓存参数,可以削减来自攻击的流量,同时也可以减轻对后端服务器的请求压力。以下是一些有用的设置:

  •  proxy_cache_use_stale 的updating参数告诉Nginx什么时候该更新所缓存的对象。只需要到后端的一个更新请求,在缓存有效期间客户端对该对象的请求都无需访问后端服务器。当通过对一个文件的频繁请求来实施攻 击时,缓存功能可极大的降低到后端服务器的请求。
  • proxy_cache_key 命令定义的键值通常包含一些内嵌的变量(默认的键值$scheme$proxy_host$request_uri 包含了三个变量)。如果键值包含 $query_string 变量,当攻击的请求字符串是随机的时候就会给Nginx代理

    7. 屏蔽特定的请求:可以设置Nginx、Nginx Plus屏蔽一些类型的请求:

  • 针对特定URL的请求
  • 针对不是常见的User-Agent的请求
  • 针对其他请求头中包含可以联想到攻击的值的请求
// 屏蔽某个页面请求
location /foo.php {
    deny all;
}
// 屏蔽请求中的User-Agent中包含foo或者bar
location / {
    if ($http_user_agent ~* foo|bar) {
        return 403;
    }
    ...
}

    8. 限制到后端服务器的连接数:一个Nginx、Nginx Plus实例可以处理比后端服务器多的多的并发请求。在Nginx Plus中,你可以限制到每一个后端 服务器的连接数,比如可以设置Nginx Plus与website upstream中的每个后端服务器建立的连接数不得超过200个:

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 参数指定了请求在队列中的保留时间。

    9.用nginx+lua实现自动ip封禁和限流:lua将ip访问量存入redis,结合redis进行ip访问频率等的追踪和自动封禁。 

10、解决web安全问题主要从哪些方面入手?【中低频】

1)SQL注入攻击

2)跨站脚本攻击 - XSS

3)跨站伪造请求攻击 - CSRF

4)文件上传漏洞攻击

5)分布式拒绝服务攻 击 - DDOS

来源:原创 发布时间:2022-06-10 11:50:30