0

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

2 回答 2

1

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

在您的示例中,我可以看到您正在绑定“:username”参数而不是“:table”参数,如果您接受未经处理的用户输入并将其用作“$table”值,则该参数可能是注入向量。

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

于 2012-10-22T16:40:48.470 回答
0

函数并不比函数外部的代码更安全或更不安全。如果它是你要使用不止一次或两次的东西,一定要把它放在一个函数中。只要您正确使用 PDO,就可以了。

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

于 2012-10-22T16:21:06.913 回答