Web的安全问题

1、XSS攻击(跨站点脚本攻击)

   指黑客通过篡改网页,注入恶意HTML脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式

   常见的XSS攻击类型有两种:

   1、反射性   (url参数直接注入)

   反射性:攻击者诱导用户点击一个恶意嵌入脚本的链接,达到攻击的目的

    2、存储型(持久性)

    存储型(持久性):攻击者提交含有恶意脚本的请求,保存在被攻击的Web站点的数据库中,用户浏览网页时,恶意代码被读出来被包涵在正常网页中,达到攻击目的,这种危害比较大一些,因为太隐蔽

XSS攻击注入点:

    HTML节点内容:如果节点的内容是动态生成的,里面包涵用户输入的信息,可能包涵脚本

    HTML属性:如果属性是由用户输入的造成的,那么用户输入的数据有可能包含脚本

    js代码:存在用户输入的信息

    富文本:其实一大堆HTML,HTML由XSS攻击风险

 消毒:(主要防御方法是转义)

  对HTML代码中进行转移,转移< &lt;> &gt;

  如果出现在HTML属性中,使用了“关闭了我们了属性然后产生了新的属性,新的属性中出现脚本所以用“  &quto; 进行转义

  富文本 可以按照黑名单过滤script或者按照白名单保留部分标签和属性,一般有根据白名单过滤HTML(防止XSS攻击)的组件

CSP:用于指定那些内容可以执行,那些不可以被这些,这样把用户输入标记为不可执行

 为什么产生XSS攻击呢,主要是我们写入的程序,插入一些用户的数据,但是用户的数据被当做程序来执行的

PHP中防御XSS:

  内置函数转移、DOM(domdocument)解析白名单(把字符串解析为DOM,然后做白名单)、第三方库、CSP

  //转移符号 & < > ' "  默认情况下不转义"  所以 
   htmlspecialchars($content,ENT_QUOTES)

  

CSP: header("Content-Sevurity-Policy:script-src 'self'")

2、注入攻击

 注入攻击主要有两种形式,SQL注入攻击和OS注入攻击。

 SQL注入攻击:攻击者在HTTP请求中注入恶意SQL命令,服务器用请求参数构造数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行 (1 or 1 =1) select * from table where id=1 or 1=1;   

SQL注入攻击需要攻击者对数据库框架有所了解才能执行,攻击者获取数据库表结构信息的手段如下几种:1、开源的软件搭建网站 2、错误回显 3、盲注 根据网页变化情况判断SQL语句执行情况,这种攻击难度较大

消毒:

  1、检查数据类型 

 1、 $id=intval($_GET['id'])  //主要是数字

2、对数据进行转义

2、$title= mysqli_real_escape_string($_GET['title'])

3、使用参数化查询 (又数据库提供,来自于PDO,把查询语句分为两部分,发过去)

4、使用ORM(对象关系映射)

    在框架里面有对ORM进行封装,底层还是使用PDO做封装的

3、CSRF攻击

 CSRF:跨站请求伪造,其他网站对本网站产生的影响,以合法用户身份进行非法操作,如转账交易、发表评论。其核心是利用了浏览器Cookie或者服务器Session策略,盗取用户身份

CSRF防御手段主要识别请求者身份:

 1、表单Token :CSRF是一个伪造用户请求的操作,所以需要构造用户请求的所有参数才可以,表单Token通过在请求参数中添加随机数的办法阻止攻击者获取所有请求参数。在表单页面中添加一个随机Token,每次响应Token都不同,从正常提交的请求会包含Token,而伪造请求无法获取该值,服务器检查参数中Token指是否存在并且正确以确定请求提交者是否合法

2、验证码:请求提交的时候需要用户输入验证码,以避免用户不知情的情况下被攻击者伪造请求。

3、Referer check :HTTP请求头的Referer域中记录着请求来源,通过检查请求来源,验证是否合法。很多网站使用这个额功能实现图片防盗链(如果图片访问的页面来源不是来自自己网站的页面就拒绝)

4、其他攻击和漏洞

 Error Code:错误回显,许多Web服务器默认打开异常信息输出的,这种方式虽然对程序调试和错误报告有好处,但是攻击者通过故意制造非法输入,使系统运行时出错获取异常,然后需要漏洞攻击。防御手段也很简单,通过配置Web服务器参数,挑战500页面到专门错误页面即可,Web应用常用MVC框架也有这个功能

HTML注释:为了调试长须或者其他不恰当原因,开发人员在PGP等服务器页面程序使用HTML注释语法,这些注释会显示在客户端浏览器,所以最终发布前需要代码review或者自动扫描,避免HTML注释漏洞

文件上传:如果上传的是可执行的程序,并通过改程序获取服务器命令执行能力,那么攻击者可以在服务器上为所欲为,并以此为跳板攻击集群环境的其他机器。最有效的防御手段是设置上传白名单,只允许上传可靠的文件类型,此外还可以修改文件名,使用专门的存储等手段保护服务器面授上传文件攻击

路径遍历:攻击在请求的URL使用相对路径,遍历系统未开放的目录和文件。防御方法主要讲JS、CSS等资源文件部署在独立服务器上,使用独立域名,其他文件不适用静态URL访问,动态参数不包含文件路径信息

5、信息加密技术

 信息加密技术可分为三类:单向散列加密、对称加密和非对称加密

1、单项散列加密

    是指通过对不同输入长度信息进行散列计算,得到固定长度的输出,这些散列计算过程是单向的

    利用单向散列加密这个特性,可以对密码进行加密保存,即用户注册时输入的密码不直接保存到数据库,而对密码进行单向散列加密,将密文存入数据库,用户登录时,进行密码验证,同样进行输入密码进行散列加密,并对比如果一致,则密码验证成功

    虽然不能通过算法将散列密文反算得到明文,但是由于人们设置密码具有一定的模式,因此通过彩虹表手段进行猜测式破解

    为了加强单向散列计算的安全性,还会给散列算法家点盐(salt),salt相当于加密的密码,增强破解难度

    常用的单向散列算法 MD5、SHA。单向散列算法还有一个特点:就是输入的任何微小变化都会导致输入的完全不同,这个特性有时也会被用来生成信息摘要等用途

发布了83 篇原创文章 · 获赞 87 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/ligupeng7929/article/details/91400463