将$ _SESSION变量直接放入SQL存在安全风险吗?

时间:2015-07-03 21:33:32

标签: php sql

如果我有一个会话变量$_SESSION['username'],并且用户名只能包含字母,数字,下划线和连字符,并且我将它直接放入SQL中,这是否容易引起注入?

$sessionUsername = $_SESSION['username'];
SELECT x FROM y WHERE z='$sessionUsername'

1 个答案:

答案 0 :(得分:0)

会话变量可以从外部更改,所以是的,这是一个风险。有几种方法可以克服这种风险,因为你可以使用预备语句which is recommended。或者您可以使用filter_var来排序潜在的线程,但建议使用明确的语句。

准备好的陈述的例子。未经测试但应该没问题。

<?php
$dataFromDb = array();

$conn = new mysqli('HOST', 'USER', 'PASS', 'DATABASE');
$query = "SELECT x FROM y WHERE z = ?";
if ($stmt = $conn->prepare($query)) {
    $stmt->bind_param('s', $_SESSION['username']);
    $stmt->execute();
    $result = $stmt->get_result();
    while ($results = $result->fetch_array(MYSQLI_ASSOC)) {
        $dataFromDb[] = $results;
    }
}