使用函数访问数据库值是否安全?

时间:2012-10-22 16:16:45

标签: php mysql function pdo

我对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);
?>

2 个答案:

答案 0 :(得分:1)

你问的问题是非常开放的。攻击的最大载体始终是用户输入(用户可以通过$ _GET或$ _POST变量提交给您的应用程序/网站的任何内容)。当然,PHP语言结构没有安全威胁,例如。功能

在您的示例中,我可以看到您绑定了&#34;:username&#34;参数但不是&#34;:table&#34;如果您接受未经过验证的用户输入并将其用作&#34; $ table&#34;它可能是注入向量的参数。值。

总是要小心你如何使用$ _GET和$ _POST值...当这变得乏味时,寻找一个框架来使其中的一些自动化。

答案 1 :(得分:0)

函数不比函数外的代码更安全或更不安全。如果你要使用超过一次或两次,绝对将它放在一个函数中。只要你正确使用PDO,你就可以了。

也就是说,您可能希望将所有数据库函数放在一个类中,然后实例化该类的$ db对象,然后可以从中调用所需的任何数据库函数。有很多方法可以组织代码以使事情更容易使用。