只是询问您是否可以注意到此代码中的任何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>
答案 0 :(得分:4)
您不接受任何用户输入,因此不能。
答案 1 :(得分:2)
当您不清理用户输入时,会发生SQL注入。
示例:
"SELECT joketext FROM joke WHERE joker = " . $_GET['joker']
这很糟糕,因为我可以把任何我想要的东西放在变量(http://yoursite.com/joke.php?joker=whatever
)中,它会被执行!
您不接受用户输入,因此我没有机会做这样的事情。您执行的查询每次都是相同的,并在您的php文件中进行硬编码。
在Wiki上阅读有关SQL注入的更多信息。