CSRF、XSS、SQL注入、DDOS攻击、时序攻击分别是什么以及怎么防范

1、CSRF

(1) CSRF简介:

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。

(2) CSRF攻击的危害

主要的危害来自于,攻击者盗用用户身份,发送恶意请求。比如:模拟用户发送邮件,发消息,以及支付、转账等。

XSS主要是利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求,来利用受信任的网站。与XSS攻击相比,CSRF更具危险性。

(3) 防止CSRF的解决方案
  • 重要数据交互采用POST进行接收,当然是用POST也不是万能的,伪造一个form表单即可破解。
  • 使用验证码,只要是涉及到数据交互就先进行验证码验证,这个方法可以完全解决CSRF。
  • 但是出于用户体验考虑,网站不能给所有的操作都加上验证码。因此验证码只能作为一种辅助手段,不能作为主要解决方案。
  • 验证HTTP Referer字段,该字段记录了此次HTTP请求的来源地址,最常见的应用是图片防盗链。
  • 为每个表单添加令牌token并验证。

2、XSS

(1) XSS简介

跨站脚本(cross site script)简称为XSS,是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。

XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去,使别的用户访问都会执行相应的嵌入代码。

(2) XSS攻击的危害
  • 盗取用户资料,比如:登录帐号、网银帐号等
  • 利用用户身份,读取、篡改、添加、删除数据等
  • 盗窃重要的具有商业价值的资料
  • 非法转账
  • 强制发送电子邮件
  • 网站挂马
  • 控制受害者机器向其它网站发起攻击
(3) 防止XSS的解决方案
  • XSS的根源主要是没完全过滤客户端提交的数据 ,所以重点是要过滤用户提交的信息。
  • 将重要的cookie标记为http only, 这样的话js 中的document.cookie语句就不能获取到cookie了。
  • 只允许用户输入我们期望的数据。例如:age用户年龄只允许用户输入数字,而数字之外的字符都过滤掉。
  • 对数据进行Html Encode 处理:用户将数据提交上来的时候进行HTML编码,将相应的符号转换为实体名称再进行下一步的处理。
  • 过滤或移除特殊的Html标签。
  • 过滤js事件的标签。例如 “οnclick=”, “onfocus” 等。

3、SQL注入

(1) SQL注入简介

SQL注入是比较常见的网络攻击方式之一,主要是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,实现无帐号登录,甚至篡改数据库。

(2) SQL注入攻击的危害
  • 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露;
  • 网页篡改:通过操作数据库对特定网页进行篡改;
  • 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改;
  • 服务器被远程控制,被安装后门;
  • 删除和修改数据库表信息.
(3) SQL注入的方式

通常情况下,SQL注入的位置包括:

  • 表单提交,主要是POST请求,也包括GET请求;
  • URL参数提交,主要为GET请求参数;
  • Cookie参数提交;
  • HTTP请求头部的一些可修改的值,比如Referer、User_Agent等;
(4) 防止SQL注入的解决方案
  • 对用户的输入进行校验,使用正则表达式过滤传入的参数;
  • 使用参数化语句,不要拼接sql,也可以使用安全的存储过程;
  • 不要使用管理员权限的数据库连接,为每个应用使用权限有限的数据库连接;
  • 检查数据存储类型;
  • 重要的信息一定要加密;

4、DDOS

(1) DDOS简介
  • DOS攻击(Denial of Service 拒绝服务攻击):凡是利用网络安全防护措施不足导致用户不能继续使用正常服务的攻击手段,都可以被称为是拒绝服务攻击,其目的是通过消耗网络宽带或系统资源,使网络或计算机不能提供正常的服务。
  • DDOS(Distributed Denial of Service ,分布式拒绝服务),凡是攻击者通过控制在网络上的傀儡主机,同时发动他们向目标主机进行拒绝服务攻击的方式称为分布式拒绝服务攻击。
(2) DDOS攻击的危害
  • 造成客户业务不可用、利益受损
  • 客户网内一个业务受到攻击,客户联网全面受阻,所有业务瘫痪,连锁反应严重
  • 攻击引发的政治影响、社会舆论的压力给企业带来名誉损失
(3) 如何防御DDOS攻击
  • 及时更新系统补丁
  • 安装查杀软硬件,及时更新病毒库
  • 设置复杂口令,减低系统被控制的可能性
  • 关闭不必要的端口与服务
  • 经常检测网络的脆弱性,发现问题及时修复。
  • 对于重要的web服务器可以建立多个镜像实现负载均衡,在一定程度上减轻DDOS的危害

5、时序攻击

(1) 时序攻击简介

在密码学中,时序攻击是一种侧信道攻击,攻击者试图经过分析加密算法的时间执行来推导出密码。每个逻辑运算在计算机须要时间来执行,根据输入不一样,精确测量执行时间,根据执行时间反推出密码。php

若是是用普通的 == 来进行比较,那么两个字符串是从第一位开始逐一进行比较的,发现不一样就当即返回 false,那么经过计算返回的速度就知道了大概是哪一位开始不一样的,这样就实现了电影中常常出现的按位破解密码的场景。

(2) 如何防御时序攻击

php中为了应对这种状况,能够使用hash_equals函数。

摘抄一段php手册上的信息:

hash_equals ( string $known_string , string $user_string ) : bool

比较两个字符串,不管它们是否相等,本函数的时间消耗是恒定的。

本函数能够用在须要防止时序攻击的字符串比较场景中, 例如,能够用在比较 crypt() 密码哈希值的场景。


$expected  = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$correct   = crypt('12345', '$2a$07$usesomesillystringforsalt$');
$incorrect = crypt('apple',  '$2a$07$usesomesillystringforsalt$');

var_dump(hash_equals($expected, $correct));//true
var_dump(hash_equals($expected, $incorrect));//false
?>

你可能感兴趣的:(面试题,php功能实现,csrf,xss,sql)