Sql注入,我不确定是否还需要了解其他内容

时间:2019-03-15 14:56:12

标签: php sql

我在Google中看到很多网站,在这些网站上发现了SQL注入漏洞。当然,其中大多数是index.php?id = 1或类似的名称。为什么有些事情告诉我,即使我在这样的页面上使用准备好的语句,我仍然容易受到SQL注入的攻击?我的意思是...怎么会有这么多网站容易受到SQL注入攻击。如果我使用准备好的语句,该链接安全吗? 使用这样的链接看到这么多易受攻击的站点简直让我震惊。我问自己,有没有办法让别人这么傻?他们该如何编码具有此类漏洞的看上去如此专业的网站。我知道准备好的语句如何工作。使用准备好的语句时,可以防止数据库将输入作为代码读取。事实是,我看到如此多的网站容易受到攻击..这使我对我的网站深感怀疑。我的用户页面使用完全相同的方法,这是我的代码。

<?php
// Setting the input ID to variable
if(isset($_GET['id'])){
$the_input_id = $_GET['id'];
}else{
header("location: ?page=error1");
exit;
}

global $db;
$stmt = $db->prepare("SELECT * FROM users WHERE id=:id");
$stmt->execute([':id' => $the_input_id]);
$result = $stmt->fetchAll();
$db = null;

// Checking if there is result ...
if (!$result){ // If there is no result ...
    header("location: ?page=usernotfound");
    exit;
}else{ // If there is result ...
    // Show the user profile
}

?>

这是我的用户页面中的代码,该代码基于用户的输入,但是您可以看到我正在使用准备好的语句。我还是很担心。关于安全性,也许我还需要了解更多信息?在我今天看到的站点之后,我一直在心中产生很大的疑问。

我还看到一些论坛未使用诸如index.php?id = 1之类的链接。他们使用类似“ www.randomforum.com/index.php?/user/1029498/”的名称。好吧,那怎么运作?我认为该链接不能通过SQL注入。我没有那么丰富的经验,所以我需要有人向我解释这种链接是如何工作的。我认为这可以通过以下方式进行:

-每次注册用户时,都会在“用户”文件夹中创建一个新文件。文件名是用户帐户的ID。该文件仅包含用户页面。

这是我对该论坛的工作方式的解释...但是我确定我错了。请给我一些意见。谢谢您的宝贵时间。

1 个答案:

答案 0 :(得分:0)

根据我的经验,使您的网站免受此类攻击的威胁的最佳方法是:

1)mysql查询中的转义参数。 您当前正在执行此操作。只要您将准备好的语句放在execute([])数组中,它就会为您转义。

2)在输出中转义HTML。 如果有人将HTML插入表中,则需要转义其输出。最好的方法是使用htmlspecialchars()

更多信息在这里: http://php.net/manual/en/function.htmlspecialchars.php

3)遍历所有代码!您要确保您不接受原始用户输入,因为一种错误的表单可能会破坏所有信息。

您正在谈论的网站创建者可能真的很擅长创建表单样式,但可能需要更多有关其php编码的帮助。

祝您网站好运!