首页 php教程 php手册 Php 安全错误 Top 7

Php 安全错误 Top 7

Jun 21, 2016 am 09:11 AM
php print year

安全|错误

PHP对于飞速发展的动态网站来说是一门恐怖的语言。它对于新手来说也有很多友好的性质,比如变量不需要定义就可以直接使用。但是,一些类似的这种性质使程序员不会注意到在网站应用方面的一些安全问题。一个非常著名的邮件列表就充满很多条了对PHP应用有漏洞的例子,但一旦你理解了PHP应用中这些基本的漏洞,PHP将变得比其他任何语言都安全。

在这篇文章中,我会详细的说说明在一般PHP程序中常见的导致安全问题的错误。而且会展示给你什么是不能做的,还有这些特殊的漏洞是怎么被发现的,我希望你不但可以懂得怎么来避免这些特殊的错误,而且可以知道它们为什么会导致安全问题。了解每种可能出现的漏洞能帮助你避免在编写PHP程序时发生同样的错误。安全是一个过程,而不是一个产品,通过在开发应用程序的过程中了解安全问题可以让你编出更高效更健壮的代码。

Unvalidated Input Errors 不受重视的输入错误
最常见的PHP安全问题之一就是对用户输入过滤的漏洞。一般用户提交数据都是不可信任的。你应该假设所有所有访问你网站的用户都是恶意的。非正常输入是很多PHP应用程序漏洞的最根本的原因,我们将在后面进行讨论。
现在给大家一个例子,你可以写下面这段代码来允许用户看到可以一个通过执行UNIX中的cal命令来显示特殊月份。

$month = $_GET[month];
$year = $_GET[year];

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

"; <br>foreach ($result as $r) { print "$r<br>"; } <br>print "
登录后复制
登录后复制
";

这段代码有很多安全问题。比如$_GET[month]和$_GET[year]没有过滤就直接赋给了$month和$year,如果用户输入的月份是1到12之间,而且年份是4位数字当然是没有问题。不过,恶意的用户会在年份后面加上一个";ls -la",这样他就可以以列表的方式看到你网站的所有目录。更加极端的用户会在年份后面加上";rm -rf",这样就能删掉你的整个网站!
改正这个安全问题的最好的方法是在接收用户输入的数据时进行检测,使他成为你所希望的格式。不要使用JS来验证,这种验证很容易就能绕过,比如建立一个自己的表单来提交数据,或者用浏览器禁用JS。你应该用PHP代码来确保输入的年份和月份是数字,而且必须是数字。就象下面的代码这样:

$month = $_GET[month];
$year = $_GET[year];

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

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

"; <br>foreach ($result as $r) { print "$r<br>"; } <br>print "
登录后复制
登录后复制
";

这样的代码就能安全的使用,而不用考虑用户提交的数据会使你的应用程序产生错误,或导致服务器运行用户提交的非法代码。正则表达式是验证数据的一个非常有效的工具。虽然他很难完全掌握,但在这种情况下还是非常实用的。
你应该验证用户提交的数据,来拒绝所有非法的数据。一定不要在没有验证之前接收任何数据,除非你可以确定它一定是安全的数据。这是一个常见的安全问题。但有时,恶意的用户会通过一些方法来提交一些特定的数据,这样可以绕过你的验证,而且会起到有害的作用。
所以你应该严格的验证提交的数据,如果一些字符是不需要的,那么你应该过滤掉这些字符或者直接拒绝接收这些的数据。

Access Control Flaws 非法控制漏洞
这是一个对PHP应用程序来说非必要的验证,但却是十分重要的,就是非法控制。比如有一个管理页,在这个页中可以修改网站的配置,或会显示一些敏感的信息。
你应该在执行每一个PHP应用页面时对用户的权限进行检查。如果你只在首页检查了用户的权限,那么恶意的用户可以直接在地址栏输入地址来进入后面的那些没有进行权限判断的页面。
建议进行严格的检查。如果可能的话,你可以根据用户的IP来判断他们的权限。另一个好的方法是把把你不想让别人访问到的页面放到一个特殊的目录,并用apache中的.htaccess来保护这个目录。
把网站的配置文件放在网站可以直接访问的目录之外。这种配置文件包括数据库的密码和其他一些会让恶意用户利用来攻击你的网站的信息。用PHP的include函数来包含这些文件。虽然做这些事感觉有点多余,但对于网站的安全还是有积极的作用的。
例如我写的PHP应用程序。所有的自定义的函数库都放在一个includes的文件夹中。一般把这些被包含的文件取一个以.php为后缀的文件名,这样就算你所做的保护措施都被绕过了,服务器也会把这些文件当做PHP文件来解析,而不会显示这些文件的内容。www和admin文件夹是唯一的可以通过URL直接访问的文件夹。admin文件夹受到.htaccess的保护,只允许知道储存在.htpasswd中的用户名和密码的用户可以访问。
/home
/httpd
/www.example.com
.htpasswd
/includes
cart.class.php
config.php
/logs
access_log
error_log
/www
index.php
/admin
.htaccess
index.php
你应该设置你的apache的默认主页名是index.php并且确保每个目录都有index.php这个文件。当别人访问这些你不想让别人访问的目录时让他转向到网站的主页,比如存放图片的目录或其他类似的。
千万不要把你的备份文件取文件名为.bak的后缀,并放在可以直接通过URL访问的目录。如果你这样做了,那么在这些文件中的PHP代码将不会被解析,甚至可能会被用户通过URL直接下载。如果这些文件包含密码或其他敏感的信息,那么有可能会被别人知道,甚至可能被搜索引擎,比如GOOGLE,直接搜索到而显示在页面上。一定要把这些文件重新命名为 .bak.php 为后缀的文件,这样会安全一些,不过最好的解决方法还是用象CVS那样控制。CVS学起来有一些复杂,不过你学习的所花的时间会在以后得到回报。这样的系统可以让你把每个不同版本的程序保存在不同的文件夹,如果你的程序以后出了问题,这些以前保存的版本可能会成为你无价的资源。.

[1] [2] [3] 下一页  



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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1272
29
C# 教程
1252
24
PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP:网络开发的关键语言 PHP:网络开发的关键语言 Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

PHP行动:现实世界中的示例和应用程序 PHP行动:现实世界中的示例和应用程序 Apr 14, 2025 am 12:19 AM

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP与Python:了解差异 PHP与Python:了解差异 Apr 11, 2025 am 12:15 AM

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP的持久相关性:它还活着吗? PHP的持久相关性:它还活着吗? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP和Python:代码示例和比较 PHP和Python:代码示例和比较 Apr 15, 2025 am 12:07 AM

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

PHP与其他语言:比较 PHP与其他语言:比较 Apr 13, 2025 am 12:19 AM

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

PHP和Python:解释了不同的范例 PHP和Python:解释了不同的范例 Apr 18, 2025 am 12:26 AM

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

See all articles