【问题标题】:Projected PDO Statement: is this right?预计的 PDO 声明:对吗?
【发布时间】:2013-09-14 17:54:17
【问题描述】:

我真的只是想检查这个语句的语法,并确保它是一个不受 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'];

我没有执行准备好的语句。

【问题讨论】:

  • 没有你的代码容易受到 SQL 注入攻击,使用准备好的语句和参数化查询...
  • 看看Bobby Tables
  • 你能帮我弄清楚第一个语句会受到sql注入的保护吗?
  • 请学会使用prepared statements
  • 如果你使用来自外界的变量来构建 SQL 语句,那你就错了。 使用 PDO 是不够的。您还必须使用查询参数。

标签: php sql pdo sql-injection


【解决方案1】:

我会推荐conn->[execute][1] 而不是[query][2]。因为这将是一个真正准备好的声明,而不是你需要逃避的声明。

SELECT * FROM users WHERE ID =:userID

然后做:

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

就恶意内容而言,假设我给你一个userId,看起来像这样:

<script>alert('Hi')</script>  

现在还假设您将我的 userId 显示给管理员或其他用户。我可能会注入稍后执行的恶意代码。因此,您仍然必须注意确保正确转义返回给用户的数据。但在大多数情况下,绑定参数会阻止任意 SQL 执行。

功能代码:

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

【讨论】:

  • 所以只使用执行而不是查询就可以保护它吗?
  • 不,你是 bindParams。有了绑定参数,就不需要转义了。
  • @gview 之类的,它只防止 SQL 被执行,而不是恶意数据影响其他地方的应用程序。
  • 这是对未定义函数 bindParams() 的调用
  • @user2362601 它的 bindParam no s
猜你喜欢
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 2021-11-26
相关资源
最近更新 更多