zoukankan      html  css  js  c++  java
  • PHP安全之道学习笔记1:PHP项目安全设置

    在全球范围来看,超过了80%的网站是使用php进行搭建的,由于脚本语言和早期版本设计的诸多原因,php项目存在不少安全隐患。从配置选项来看,可以做如下的优化。

    • 1.屏蔽PHP错误输出。
      在/etc/php.ini(默认配置文件位置),将如下配置值改为Off

    display_errors=Off

    不要将错误堆栈信息直接输出到网页上,防止黑客加以利用相关信息。

    正确的做法是:
    把错误日志写到日志文件中,方便排查问题。

    • 2.屏蔽PHP版本。
      默认情况下PHP版本会被显示在返回头里,如:

    Response Headers
    X-powered-by: PHP/7.2.0

    将php.ini中如下的配置值改为Off

    expose_php=Off

    • 3.关闭全局变量
      如果开启全局变量会使一些表单提交的数据被自动注册为全局变量。代码如下:
    <form action="/login" method="post">
    <input name="username" type="text">
    <input name="password" type="password">
    <input type="submit" value="submit" name="submit">
    </form>
    

    如果开启了全局变量,则服务器端PHP脚本可以用$username和$password来获取到用户名和密码,这会造成极大的脚本注入危险。

    开启方法是在php.ini中修改如下:

    register_globals=On

    建议关闭,参数如下:

    register_globals=Off
    当关闭后,就只能从$_POST、$_GET、$_REQUEST里面获取相关参数。

    • 4.文件系统限制

    可以通过open_basedir来限制PHP可以访问的系统目录。

    如果不限制使用下面的脚本代码(hack.php)可以获取到系统密码。

    <?php
    
    echo file_get_contents('/etc/passwd');
    

    当设置了后则会报错,不再显示相关信息,让系统目录b不会被非法访问:

    PHP Warning:  file_get_contents(): open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/var/www) in /var/www/hack.php on line 3
    
    Warning: file_get_contents(): open_basedir restriction in effect. File(/etc/passwd) is not within the allowed path(s): (/var/www) in /var/www/hack.php on line 3
    PHP Warning:  file_get_contents(/etc/passwd): failed to open stream: Operation not permitted in /var/www/hack.php on line 3
    
    Warning: file_get_contents(/etc/passwd): failed to open stream: Operation not permitted in /var/www/hack.php on line 3
    

    设置方法如下:

    open_basedir=/var/www

    • 5.禁止远程资源访问
      allow_url_fopen=Off
      allow_url_include=Off

    • 其他第三方安全扩展
      Suhosin
      设计初衷是为了保护服务器和用户抵御PHP程序和PHP核心中,已知或者未知的缺陷。
      PHP7支持版本

    Taint

    用于xss/sqli/shell注入的检测。

    安装使用教程

  • 相关阅读:
    0001 工作业务问题_滞纳金公式计算区别实例
    001 win10下安装linux子系统--Ubuntu及其图形界面
    Java知识系统回顾整理01基础07类和对象01引用
    Java知识系统回顾整理01基础06数组07数组工具类Arrays
    Java知识系统回顾整理01基础06数组06二维数组
    Vue 框架中添加百度地图组件
    VUE中使用vue.nextTick 报this.nextTick is not a function错误
    VUE 饿了么项目实战 VUE &quot;TypeError: Cannot read property 'deliveryPrice' of undefined&quot;报错
    VUE vue2.0配置webpack.dev.conf.js加载本地json数据
    VUE response.json() 的更新问题
  • 原文地址:https://www.cnblogs.com/freephp/p/11931277.html
Copyright © 2011-2022 走看看