在全球范围来看,超过了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注入的检测。

安装使用教程

最新文章

  1. JavaScript原型链分析
  2. 用流从一个指定的网址抓取html代码
  3. 11个实用的Apache .htaccess配置
  4. mysql 5.6 binlog组提交
  5. printf那点事
  6. python+selenium遇到鼠标悬停不成功可以使用js进行操作
  7. badboy 录制脚本并并发脚本
  8. centos7时间同步
  9. git下载Ardupilot源码
  10. Python学习笔记 - 数据类型和变量
  11. 基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件
  12. 剑指Offer 60. 把二叉树打印成多行 (二叉树)
  13. 给力开源,.Net开源地址大收集
  14. session(概念、session对象的获取、删除、验证)
  15. python scrapy 调试模式
  16. iframe内点击a标签禁止滚动到顶部
  17. [BZOJ 2200][Usaco2011 Jan]道路和航线 spfa+SLF优化
  18. 微信小程序获取用户openid,头像昵称信息,后台java代码
  19. 2、Python文件操作工具 xlrd 工具
  20. win10怎么彻底关闭自动更新

热门文章

  1. JavaScript中valueOf、toString的隐式调用
  2. 07 python学习笔记-写一个清理日志的小程序(七)
  3. 函数基础(一)(day10整理)
  4. NetworkManager网络通讯_NetworkLobbyManager(三)
  5. 原版_打字游戏.html
  6. spring整合mybatisplus2.x详解
  7. PHP 类中使用全局变量和全局常量
  8. MySql逻辑结构简介
  9. 一个自动管理项目的Makefile(C语言)
  10. [考试反思]1007csp-s模拟测试63:朦胧