Прогнозируемое выражение PDO: это право?

Я просто хочу проверить синтаксис этого оператора и убедиться, что это выражение, безопасное для SQL-инъекции. Может ли кто-нибудь проверить это для меня и сообщить?

$lookupusername= $conn->prepare('SELECT * FROM users WHERE ID =":userId"');
$lookupusername->bindParam(':userId', $userid, PDO::PARAM_STR, 12);
$row = $lookupusername->fetch();
$username = $row['username'];
$usercountry = $row['country'];
if ($username == ""){
header('Location: index.php');
}

Там также говорится:

$sql = $conn->query('SELECT description, city, status, state, country, needsusername, howmanypeopleneeded, howmanypeoplesignedup, needs.orgname, needs.ID, titleofneed, expiredate, datesubmitted, datetime FROM needs INNER JOIN follow ON follow.followname = needs.needsusername WHERE follow.username=' . $conn->quote($username) . ' AND needs.christmas="0" AND needs.status="posted" ORDER BY datesubmitted DESC');
while ($frows = $sql->fetch()) {

ЗАКЛЮЧИТЕЛЬНЫЙ КОД:

$lookupusername= $conn->prepare('SELECT * FROM users WHERE ID=:userid');
$lookupusername->bindParam(':userid', $userid);
$lookupusername->execute();
$row = $lookupusername->fetch();
$username = $row['username'];
$usercountry = $row['country'];

Я не выполнял подготовленное выражение.

1 ответ

Я бы рекомендовал conn->[execute][1] вместо [query][2]. Поскольку это будет реальная подготовленная инструкция, а не одна, вам нужно убежать.

SELECT * FROM users WHERE ID =:userID

затем выполните:

bindParam(':userId', $userId, PDO::PARAM_STR, 12);

Что касается вредоносного контента, предположим, что на секунду я передаю вам userId который выглядит так:


Теперь давайте предположим, что вы показываете мой userId кому-то, кто является администратором или другим пользователем. Я могу потенциально внедрить вредоносный код, который будет выполнен позднее. Поэтому вы должны позаботиться о том, чтобы данные, возвращенные пользователю, были надлежащим образом экранированы. Но по большей части параметры привязки предотвратят произвольное выполнение SQL.

функциональный код:

$sql= $conn->prepare('SELECT * FROM users WHERE ID =:userID');
$sql->bindParam(':userId', $userId, PDO::PARAM_STR, 12);

licensed under cc by-sa 3.0 with attribution.