此脚本是否存在SQL注入风险?

时间:2013-01-02 00:14:01

标签: php mysql code-injection

只是询问您是否可以注意到此代码中的任何SQL注入可能性,如果发现任何问题,请回复。此代码用于从MySQL数据库加载简单的“笑话”。谢谢:))

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php

        try
        {
            $pdo = new PDO('mysql:host=localhost;dbname=website', 'root', '');
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $pdo->exec('SET NAMES "utf8"');
        }
        catch (PDOException $e)
        {
            $error = '<font color="red"><strong><p align="center">Unable to connect to the database server. Please visit again later!</p></strong></font>';
            include 'error.html.php';
            exit();
        }

        try
        {
            $sql = 'SELECT joketext FROM joke';
            $result = $pdo->query($sql);
        }
        catch (PDOException $e)
        {
            $error = '<font color="red"><strong><p align=center>Error Fetching Jokes</p></strong></font>';
            include 'error.html.php';
            exit();
        }

        while ($row = $result->fetch())
        {
            $jokes[] = $row['joketext'];
        }

        include 'jokes.html.php'; // Array listing parse
        ?>
    </body>
</html>

2 个答案:

答案 0 :(得分:4)

您不接受任何用户输入,因此不能。

答案 1 :(得分:2)

当您不清理用户输入时,会发生SQL注入。

示例:

"SELECT joketext FROM joke WHERE joker = " . $_GET['joker']

这很糟糕,因为我可以把任何我想要的东西放在变量(http://yoursite.com/joke.php?joker=whatever)中,它会被执行!

您不接受用户输入,因此我没有机会做这样的事情。您执行的查询每次都是相同的,并在您的php文件中进行硬编码。

Wiki上阅读有关SQL注入的更多信息。