常见PHP网站安全漏洞对于PHP的漏洞有哪些?笔者探究
优采云 发布时间: 2021-08-04 19:48
常见PHP网站安全漏洞对于PHP的漏洞有哪些?笔者探究
PHP网站常见安全漏洞及防御方法
目前,基于PHP的网站开发已经成为网站开发的主流。本文作者重点探索PHP网站攻击与安全,旨在减少网站漏洞。希望大家帮帮忙!
一、commonPHP网站安全漏洞
对于 PHP 漏洞,目前有五个常见漏洞。它们是会话文件漏洞、SQL 注入漏洞、脚本命令执行漏洞、全局变量漏洞和文件漏洞。以下是对这些漏洞的简要介绍。
1、session 文件漏洞
会话攻击是黑客最常用的攻击方式之一。当用户访问某个网站时,为了避免客户每次进入页面都需要输入账号和密码,PHP设置了Session和Cookie,方便用户的使用和访问。
2、SQL 注入漏洞
网站开发过程中,程序员对用户输入的数据缺乏综合判断或者没有严格过滤,导致服务器执行一些恶意信息,比如用户信息查询。黑客可以根据恶意程序返回的结果获取相应的信息。这是月星微的SQL注入漏洞。
3、脚本执行漏洞
脚本执行漏洞的常见原因是程序员在开发网站时很少过滤用户提交的URL参数。用户提交的网址可能含有恶意代码,导致跨站脚本攻击。以前的PHP网站经常存在脚本执行漏洞,但随着PHP版本的升级,这些问题已经减少或不复存在。
4、全局变量漏洞
PHP 中的变量和其他开发语言一样使用时不需要提前声明。 PHP中的变量无需声明即可直接使用,使用时系统会自动创建,无需解释变量的类型。系统会根据上下文自动确定变量类型。这种方法可以大大降低程序员在编程中出错的概率,使用起来非常方便。
5、文件漏洞
文件漏洞通常是网站developers在设计网站时没有对外部提供的数据进行充分过滤导致的,导致黑客利用漏洞在Web进程上执行相应的命令。如果在lsm.php中收录这样一段代码:include($b.”/aaa.php”.),对于黑客来说,可以使用变量$b来实现远程攻击,可以是黑客自己的实现对网站 的攻击的代码。可以向服务器提交a.php include = 1/b.php,然后执行b.php命令。
二、PHP 常见漏洞防范措施
1、预防会话漏洞
由前面的分析可知,最常见的Session攻击是Session劫持,即黑客通过各种攻击手段获取用户的Session ID,然后利用被攻击用户的身份登录到相应的网站。为此,可以采用以下方法来防止:一是定期更改Session ID,可以通过PHP自带的功能来实现;另一种是更改会话的名称,通常会话的默认名称是PHPSESSID,这个变量一般是存放在一个cookie中。如果更改其名称,则可以阻止部分黑客的攻击;三是关闭透明Session ID。所谓透明,就是不使用cookies来进行HTTP请求。对于Session id,Sessioin id 是通过链接传输的。关闭Session ID的透明度可以通过操作PHP.ini文件来实现;四是通过URL传递隐藏参数,可以保证即使黑客获取到会话数据,相关参数也被隐藏。是的,获取 Session ID 变量的值也很困难。
2、预防SQL注入漏洞
黑客使用的SQL注入方法有很多,而且很灵活,但SQL注入的共同特点是利用输入过滤漏洞。因此,为了从根本上防止SQL注入,根本的解决方案是加强对请求命令的过滤,尤其是查询请求命令。具体包括以下几点: 一是将过滤语句参数化,即通过参数化语句实现用户信息的输入,而不是直接将用户输入嵌入到语句中。二是在开发网站时尽量少用说明程序。黑客经常使用这种方法来执行非法命令;三是在开发网站时避免网站bug,否则黑客可能会利用这些信息攻击网站;仅仅防御 SQL 注入是不够的。另外,必须经常使用专业的漏洞扫描工具来扫描网站的漏洞。
3、防止脚本执行漏洞
黑客攻击脚本执行漏洞的方法多样且灵活。为此,必须采取多种综合防范手段,有效防止黑客攻击脚本执行漏洞。这里常用的有四种方法。一种是预先设置可执行文件的路径。可以通过safe_moade_exec_dir来实现;二是处理命令参数,一般通过escapeshellarg函数实现;三是使用系统自带的函数库替换外部命令;四是在运行过程中减少使用外部命令。
4、预防全局变量漏洞
<p>针对PHP全局变量的漏洞,之前的PHP版本有这样的问题,但是PHP版本升级到5.5后,可以通过设置php.ini,设置ruquest_order为GPC来实现。另外,在php.ini配置文件中,可以通过设置Magic_quotes_runtime为布尔值来设置是否在外部绘制的数据溢出字符时添加反斜杠。为了保证网站程序可以在服务器的任何设置状态下运行。可以使用get_magic_quotes_runtime查看整个程序开始时的设置状态,决定是否手动处理,或者使用set_magic_quotes_runtime(0)在开始时关闭(或者不需要自动转义时)。