我对PHP和PDO相当新,所以我不清楚除了SQL注入之外访问数据库时要避免(和包含)的内容。 (仅供参考,在“用户”表下面的示例中还包括密码),但是如果使用下面的函数访问数据库以获取安全信息?它容易受到攻击吗?
如果你不明白为什么我这样做,那是因为我发现它更快,并且它会使链接表更容易:)
<?php
require("access/common.php");
function getval($username, $column, $table, $datab){
$query = "
SELECT
id,
username,
email
FROM ".$table."
WHERE
username = :username
";
$query_params = array(
':username' => $username,
);
try
{
$stmt = $datab->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die();
}
$row = $stmt->fetch();
if($row)
{
return $row[$column];
}
}
echo getval("USERNAME", "email", "users", $db);
?>
答案 0 :(得分:1)
你问的问题是非常开放的。攻击的最大载体始终是用户输入(用户可以通过$ _GET或$ _POST变量提交给您的应用程序/网站的任何内容)。当然,PHP语言结构没有安全威胁,例如。功能
在您的示例中,我可以看到您绑定了&#34;:username&#34;参数但不是&#34;:table&#34;如果您接受未经过验证的用户输入并将其用作&#34; $ table&#34;它可能是注入向量的参数。值。
总是要小心你如何使用$ _GET和$ _POST值...当这变得乏味时,寻找一个框架来使其中的一些自动化。
答案 1 :(得分:0)
函数不比函数外的代码更安全或更不安全。如果你要使用超过一次或两次,绝对将它放在一个函数中。只要你正确使用PDO,你就可以了。
也就是说,您可能希望将所有数据库函数放在一个类中,然后实例化该类的$ db对象,然后可以从中调用所需的任何数据库函数。有很多方法可以组织代码以使事情更容易使用。