1

我的问题是如何让尝试进行 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;


?>
4

1 回答 1

0

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

于 2013-09-16T02:12:54.013 回答