php常见漏洞以及解决之道

tech2024-11-24  14

1.sql注入漏洞

恶意用户在提交查询请求的过程中将SQL语句插入到请求内容中,同时程序本身对用户输入内容过分信任而未对恶意用户插入的SQL语句进行过滤,导致SQL语句直接被服务端执行 假如我们有一个公司网站,在网站的后台数据库中保存了所有的客户数据等重要信息。假如网站登录页面的代码中有这样一条命令来读取用户信息。

<? $q = "SELECT `id` FROM `users` WHERE `username`= ' " .$_GET['username']. " ' AND `password`= ' " .$_GET['password']. " ' "; ?>

现在有一个黑客想攻击你的数据库,他会尝试在此登录页面的用户名的输入框中输入以下代码:

' ; SHOW TABLES;

点击登陆键,这个页面就会显示出数据库中的所有表。如果他现在使用下面这行命令:

'; DROP TABLE [table name];

这样他就把一张表删除了!

防范sql注入的方法

使用mysql_real_escape_string()函数 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集

本扩展自 PHP 5.5.0 起已废弃,并在自 PHP 7.0.0 开始被移除。应使用 MySQLi 或 PDO_MySQL 扩展来替换之。参见 MySQL:选择 API 指南以及相关 FAQ 来获取更多信息。用以替代本函数的有:

mysqli_real_escape_string()

2.文件上传漏洞

在上传文件的时候只判断文件名是合法的文件名就断定这个文件不是恶意文件,这确实会导致其他安全问题。并且在这种情况下,在你自己的文件中检查漏洞很不现实,因为这个漏洞可以绕过你对文件名后缀、文件类型(Content-Type)、Mime type、文件大小等的检查,所以仅仅依靠这些检查是救不了你的。

漏洞细节

这个漏洞存在于php中一个非常常用的函数中:move_uploaded_files,开发者总是用这个函数来移动上传的文件,这个函数会检查被上传的文件是否是一个合法的文件(是否是通过 HTTP 的 post 机制上传的),如果是合法的文件,则将它一定到指定目录中。

安全建议

在上传文件处不要把用户 G E T 或 者 _GET或者 GET_POST过来的变量作为move_uploaded_file()函数的目的地址,使用$_FILES[xxx][name]将不受影响。

3.XSS攻击

XSS 攻击全称跨站脚本攻击(Cross-Site Scripting),简单的说就是攻击者通过在目标网站上注入恶意脚本并运行,获取用户的敏感信息如 Cookie、SessionID 等,影响网站与用户数据安全。

XSS 攻击更偏向前端的范畴,但后端在保存数据的时候也需要对数据进行安全过滤

是针对非法的HTML代码包括单双引号等,使用htmlspecialchars()函数

最新回复(0)