• php安全性问题


    常见攻击类型

    1.sql注入:

    攻击者把SQL命令插入到Web表单的输入域或页面请求的字符串,欺骗服务器执行恶意的SQL命令。

    防范方法:

    • 1.检查变量数据类型和格式
    • 2.过滤特殊符号
    • 3.绑定变量,使用预处理语句

    2.xss攻击

    XSS其实就是Html的注入问题,攻击者的输入没有经过严格的控制进入了数据库,最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行Html代码,

    数据流程如下:攻击者的Html输入—>web程序—>进入数据库—>web程序—>用户浏览器。

    防范方法:使用htmlspecialchars函数将特殊字符转换成HTML编码,过滤输出的变量

    3.csrf攻击:

    CSRF 顾名思义,是伪造请求,冒充用户在站内的正常操作。我们知道,绝大多数网站是通过 cookie 等方式辨识用户身份(包括使用服务器端 Session 的网站,因为 Session ID 也是大多保存在 cookie 里面的),再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。

    要完成一次CSRF攻击,受害者必须依次完成两个步骤:

    • 1.登录受信任网站A,并在本地生成Cookie。
    • 2.在不登出A的情况下,访问危险网站B。

    XSS 是实现 CSRF 的诸多途径中的一条,但绝对不是唯一的一条。一般习惯上把通过 XSS 来实现的 CSRF 称为 XSRF。因为网站A有漏洞,当我们访问的时候,可能已经被注入了访问危险网站B的操作

    防范方法:

    • 1、检查网页的来源,比如laravel使用令牌
    • 2、检查内置的隐藏变量
    • 3、使用POST,不要使用GET,处理变量也不要直接使用$_REQUEST

    php安全三板斧:过滤输入、验证数据,以及转义输出。

    1.数据过滤:

    过滤输入是指转义或删除不安全的字符。在数据到达应用的存储层之前,一定要过滤输入数据,这是第一道防线,

    • HTML

    我们可以使用PHP提供的htmlentities函数过滤HTML,该函数会将所有HTML标签字符(&、<、>等)转化为对应的HTML实体,以便在应用存储层取出后安全渲染。

    • SQL查询

    在SQL查询中一定不能使用未过滤的输入数据,如果要在SQL查询中使用输入数据,一定要使用PDO预处理语句(PDO是PHP内置的数据库抽象层,为不同的数据库驱动提供统一接口),PDO预处理语句是PDO提供的一个功能,可以用于过滤外部数据,然后把过滤后的数据嵌入SQL语句,避免出现上述SQL注入问题,此外预处理语句一次编译多次运行,可以有效减少对系统资源的占用,获取更高的执行效率。关于PDO后我们后续还会在数据库部分重点讨论。

    值得注意的是,很多现代PHP框架都使用了MVC架构模式,将数据库的操作封装到了Model层,框架底层已经做好了对SQL注入的规避,只要我们使用模型类提供的方法执行对数据库的操作,基本上可以避免SQL注入风险。

    2.验证数据:

    可以php原生实现,借助php组件实现,laravel中是有专门的验证类validation

    3.转义输出:

    把输出渲染成网页或API响应时,一定要转义输出,这也是一种防护措施,能避免渲染恶意代码,造成XSS攻击,还能防止应用的用户无意中执行恶意代码。

    laravel中使用blade模板,模板引擎在底层已经为了做好了转义处理

    laravel 中如何避免csrf攻击

    用户在网站b的时候发送了操作a网站的请求,同时a网站下已经有了cookie信息,所以是合法的。laravel通过csrf_token来进行判定是不是我们自己的网站访问的,因为每次访问都带着这个token,如果是网站b过来的非法操作a网站请求,肯定不会带着这个token,也就不合法了。

    参考资料:

    http://www.freebuf.com/articles/web/39234.html

    http://www.cnblogs.com/luyucheng/p/6234524.html

    http://laravelacademy.org/post/4610.html

    http://laravelacademy.org/post/4628.html

    http://laravelacademy.org/post/4699.html

  • 相关阅读:
    Javascript之DOM的三大节点及部分用法
    Javascript之全局变量和局部变量部分讲解
    《TCP/IP详解 卷1:协议》系列分享专栏
    说一说MySQL的锁机制
    《TCP/IP详解 卷1:协议》第3章 IP:网际协议
    PHP连接MySql闪断自动重连的方法
    关于MySQL的锁机制详解
    React 源码中的依赖注入方法
    《Mysql高级知识》系列分享专栏
    《AngularJS学习整理》系列分享专栏
  • 原文地址:https://www.cnblogs.com/redirect/p/10208342.html
Copyright © 2020-2023  润新知