停止 sql 注入的最佳方法


Best ways of stopping sql injections?

我的问题是如何成为试图进行sql注入的人最烦人的人,我可能并没有真正表达我想要做什么和在我写的东西中寻找什么。

提前感谢大家的帮助。我正在尝试学习MySQL。 我打算建立一个数据库来练习,但我在这里阅读和寻找示例,并且不断看到人们说他们将在哪里获得SQL注入。

我已经读了

一段时间了,我读得越多越困惑。我决定使用PDO来防止这种情况。即使从我读到的内容来看,它是准备好的陈述,使它安全,我仍然必须将其列入白名单。

我的问题是,如果有人可以为像我这样的初学者提供一个我们可以使用的设置,这将非常有效地阻止这些攻击。据我所知,似乎几乎不可能阻止他们,我看到有人说DNS是唯一确定的方法。我想学习以正确的方式做到这一点,即使我现在可能不需要太多的安全性。

如果我没记错的话,即使你使用PDO,他们仍然可以使用盲目注射。 如果是这样,我正在考虑添加 2-5 秒的延迟或类似的东西。我不知道这对用户端来说是否太多了,我只是在学习,没有现实世界的经验。

另外,我将要做的事情类型,现在可能非常基本......妈妈和流行类型的东西。如果我用用户名和密码为某人构建一个网站,我不希望他们受到这些攻击,我只是不喜欢它。因此,如果它有点慢但更安全,我希望至少能够给他们这个选择。 我的想法是让他们真的很烦,希望不值得。

从我读到的内容来看,表名或用户名的长度可能会使他们更难,比如使用短语而不是 6-8 个字母。

此外,我认为最小特权也会有所帮助,但似乎总有办法解决所有问题,如果你是新手并且不知道自己在做什么,那么你将变得脆弱。

我已经从某个地方复制了代码,我将要适应我的需求,但我真的还没有尝试将我正在寻找的东西放在一起,仍处于阅读和学习阶段。

<?php

require_once "dBug!.php";
$dsn = "mysql:host=";
$user_name = "";
$pass_word = "";
$connect = new PDO($dsn, $user_name, $pass_word);
$sql = "SELECT * FROM books WHERE id <= 10";   
$result = $connect->prepare($sql);
$status = $result->execute();

if (($status) && ($result->rowCount() > 0))
{
$results = array();

while ($row = $result->fetch(PDO::FETCH_ASSOC))
{
    $results[] = $row;
}

new dBug($results);
}
$connect = null;

?>

阻止 SQL 注入攻击的最佳方法是使用存储过程。为此,需要编写存储过程,以便用户输入不会作为 SQL 代码提交,而是作为服务器上已存在的 SQL 语句中的变量值提交。