0

只是问你们是否可以注意到此代码中的任何 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>
4

2 回答 2

4

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

于 2013-01-02T00:16:27.377 回答
2

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

例子:

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

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

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

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

于 2013-01-02T00:18:54.060 回答