0

0

PHP最主要的7个安全漏洞

php中文网

php中文网

发布时间:2016-06-21 08:55:23

|

1632人浏览过

|

来源于php中文网

原创

  对于快速发展的动态网页而言,php是一种了不起的语言。php也具有对初级程序员友好的特点,比如php就不需要动态声明。然而,这些特征可能导致一个程序员无意地让安全漏洞潜入到web应用程序中。在php应用中,流行的安全邮件列表就出现大量被证实的漏洞,但是一旦你明白php应用程序中常见的几种漏洞的基本类型,那你将发现它和其他语言是同样安全的。

  在这篇文章中,我将详细地介绍会导致安全漏洞的几种常用见的PHP程序缺陷。通过向你们展示什么是不能做的,并且如何利用每个特定的缺陷,我希望你们不仅仅能明白怎样避免这些特定的缺陷,而且为什么这些错误能导致安全漏洞。

  明白每个可能出现的缺陷,将帮助你们避免在PHP应用程序中产生同样的错误。

  安全是一个过程,不是一个产品在应用程序开发过程中采用对安全有益的方法可以让你生成更紧密,更健壮的代码。

  未校验输入缺陷

立即学习PHP免费学习笔记(深入)”;

  如果不是最常见的PHP安全漏洞,也是其中之一的,就是未校验输入错误。提供数据的用户是根本不能信任的。你应该假定你的web应用程序的用户个个都是心怀叵测的,因为他们中的一些就是那样的。未校验或不正确验证输入是被一些漏洞所利用的根源,我们将在本文后面进行讨论。

  例如,你可能写一个允许用户查看日历的如下代码,通过调用UNIX的cal命令来显示指定月份。

  $month = $_GET['month'];

卓敏淘宝客站群系统
卓敏淘宝客站群系统

卓敏淘宝客站群系统是卓敏工作室针对淘宝客开发的专业站群系统,经过三个月来的运作,目前已经超过两万个站点使用,未出现过任何漏洞,安全可靠。 卓敏淘宝客站群系统以快速建站、便捷管理、高效收益为特色,只需几分钟,即可完成您的一个淘宝客站点,免更新、免维护是卓敏淘宝客站群系统的又一大亮点,所有产品数据都根据用户后台设置的行业分类及关键词提出佣金最高、销售最多的产品,您不需要在淘宝开放平台上烦琐的申请AP

下载

  $year = $_GET['year'];

  exec("cal $month $year", $result);

  print "

";

  foreach ($result as $r) { print "$r
"; }

  print "

";

  此代码具有一个安全漏洞缝隙,因为没有以任何的方式来验证$_GET[month]和$_GET[year]变量。只要那个特定的月份是在1到12之间,并且提供一个合适的四位数年份,那这个应用程序将完美运行。然而,恶意用户可能追加“; ls - la”到年参数,从而看到您网站的HTML目录列表。一个极端恶劣的用户可能追加";rm -rf *"到年参数,且删除整个网站!

  纠正这种错误的合适的方法就是确保你从用户接受的输入是你期望得到的。不用为这种错误使用JavaScript验证,创造他们自己形式javascript或是禁用javascript的开发者是很容易处理如此的验证方法的。为确保输入月份和年份是数字,且只有数字,你需要添加PHP代码,如下所示。

  $month = $_GET['month'];

  $year = $_GET['year'];

  if (!preg_match("/^[0-9]{1,2}$/", $month)) die("Bad month, please re-enter.");

  if (!preg_match("/^[0-9]{4}$/", $year)) die("Bad year, please re-enter.");

  exec("cal $month $year", $result);

  print "

";

  foreach ($result as $r) { print "$r
"; }

  print "

";

  不用担心用户提供影响你应用程序的输入或是运行输入的服务器,你能安全地使用代码。正则表达式是一个很棒的验证输入的工具。尽管难以掌握它,但在这种情况下是非常有用的。

  你应该总是通过拒绝与你期望数据不相符合的数据,来验证你的用户提供的数据。永远都不要使用在你知道期望数据是有害的情况下仍然接受此数据的方法,此方法是安全漏洞的共同来源。有时,恶意的用户能避开此种方法,例如,用空字符来掩盖坏输入的方法。如此的输入将通过检查,但是它仍然具有坏的影响。

  当你验证任何输入时,你应当尽可能的严格。如果有一些没必要包含的字符,可能的话,你应该要么去除那些无用的字符,要么完全拒绝输入。

  访问控制缺陷

  另一个缺陷,不一定限于PHP应用程序,但仍然是重要的,是访问控制的脆弱性类型。当你的应用程序的某些部分的应用是限定于某些用户的时候,这种缺陷就出现了,如,一个允许更改配置设置或显示敏感信息的管理页面。

  你应该检查每个你的PHP应用程序页面限制加载的用户的访问权利。如果你仅仅只检查在索引页面的用户证书,那么一个恶意的用户能直接进入一个“更深层”网页的链接,这将跳过证书检查的过程。

  如,如果你的网站有攻击用户的可预测IP或固定IP地址,则可以通过限制用户访问该用户的基本IP地址和他们用户的名字在你程序的安全层上是有利的。放置你的受限制的网页在一个由apache.htaccess文件保护的独立的目录里也是一个好的做法。

  将配置文件放置在你web访问目录的外面。一个配置文件包含数据库密码和其他一些能被恶意用户用来渗透或者破坏你站点的信息;从来不让远程用户访问这些文件。使用PHP的include函数来包含这些来自不可web访问的目录的文件,万一这个目录曾因管理员误操作而产生web访问,这可能包括含有“否定一切”的an.htaccess文件。尽管分层安全是多余的,但是它是一件积极的事情。




PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

67

2026.02.06

java多线程方法汇总
java多线程方法汇总

本专题整合了java多线程面试题、实现函数、执行并发相关内容,阅读专题下面的文章了解更多详细内容。

32

2026.02.06

1688阿里巴巴货源平台入口与批发采购指南
1688阿里巴巴货源平台入口与批发采购指南

本专题整理了1688阿里巴巴批发进货平台的最新入口地址与在线采购指南,帮助用户快速找到官方网站入口,了解如何进行批发采购、货源选择以及厂家直销等功能,提升采购效率与平台使用体验。

489

2026.02.06

快手网页版入口与电脑端使用指南 快手官方短视频观看入口
快手网页版入口与电脑端使用指南 快手官方短视频观看入口

本专题汇总了快手网页版的最新入口地址和电脑版使用方法,详细提供快手官网直接访问链接、网页端操作教程,以及如何无需下载安装直接观看短视频的方式,帮助用户轻松浏览和观看快手短视频内容。

265

2026.02.06

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

18

2026.02.06

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

29

2026.02.06

JavaScript 异步编程与事件驱动架构
JavaScript 异步编程与事件驱动架构

本专题深入讲解 JavaScript 异步编程与事件驱动架构,涵盖 Promise、async/await、事件循环机制、回调函数、任务队列与微任务队列、以及如何设计高效的异步应用架构。通过多个实际示例,帮助开发者掌握 如何处理复杂异步操作,并利用事件驱动设计模式构建高效、响应式应用。

14

2026.02.06

java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

69

2026.02.05

java中fail含义
java中fail含义

本专题整合了java中fail的含义、作用相关内容,阅读专题下面的文章了解更多详细内容。

32

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 16.2万人学习

Pandas 教程
Pandas 教程

共15课时 | 1万人学习

C# 教程
C# 教程

共94课时 | 8.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号