php - 保护网站的最佳方法和途径

标签 php mysql file security web

我几乎准备好将我的网站转移到我的网络托管服务商,但在此之前,我希望使其尽可能受到良好的保护。我听说过 MySQL 注入(inject)以及您可能面临的其他问题,我将如何保护我的网站、MySQL 数据库和文件免受它们的侵害?

我要从 mysql 扩展更改为 mysqli 或 PDO,您推荐哪一个?

最佳答案

我个人会使用PDO,它比mysqli更好。如果您不知道 mysql 注入(inject)是将原始数据插入到查询中,如下所示:

$query = "SELECT * FROM users WHERE username='" .$_GET['user']. "' AND password='" .$_GET['password']. "'";

在不清理输入的情况下,如果有人输入 admin 作为用户名和 ' OR '1'='1作为密码,查询变为:

SELECT * FROM users WHERE username='admin' AND password='' OR '1'='1'

这会导致查询忽略密码并以管理员身份登录(只要 1=1,它总是这样做)。只要使用mysql,就可以使用mysql_real_escape_string($_GET['user'])转义任何可能影响查询的内容,例如数据库可以理解的“将变成\”。请注意,攻击者可以做比以管理员身份登录更糟糕的事情,例如他们可以使用 drop 命令删除整个数据库结构并注释掉后面的代码,或者使用非常奇怪的 shellcode 实际影响您的 Web 服务器。

使用 PDO 或 MySQLi 之类的东西,准备好的语句首先告诉数据库查询将是什么,然后发送信息,而不是像这样实际将其包含在查询中:

$stm = $pdo->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stm->execute(array($_GET['user'], $_GET['password']));

编辑:还有一件事,我认为仍然可以使用 pdo 进行 mysql 注入(inject),但我不知道它是如何工作的,所以我建议做更多的研究,看看是否能找到任何东西。

关于php - 保护网站的最佳方法和途径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16134269/

相关文章:

php - 安装 SilverStripe 时出现 RedisException

php api插入查询不添加到数据库

php - 在 Elasticsearch 中进行过滤?

php - Laravel 如何在 Controller 中使用 create 函数添加记录?

php - 选择他们的(timeStamped)生日晚 X 天的用户

mysql - 如何编写一个sql查询来内连接2个表而没有重复的数据?

mysql - 为什么我在 Eclipse IoT 上不断收到 ClassNotFoundException : com. mysql.jdbc.Driver 错误

bash - 了解检查文件是否存在的脚本

用于匹配搜索间隔的 Java 文件名过滤器

file - CRC32 字符串 比较两个可能相同但不确定的文件