【问题标题】:PDO with $_POST带有 $_POST 的 PDO
【发布时间】:2017-11-05 17:50:12
【问题描述】:

我有个小问题,

例如,我上次使用 MySQL,现在使用 PDO,这就是我的问题:

当用户想在我的网站上使用 MySQL 发布消息时,如果他尝试发布类似 <div class="HAHAHA"> 的内容,它不起作用或会显示:From USER, Message => <div class="HAHAHA">

但是现在有了 PDO,当用户发布像 HTML 一样的内容时,它会在我的网站上运行。 (我不知道这是否有意义)。

我的一段代码:

<?php $contenu = nl2br($_POST['contenu']);

$sql_add_pub = $pdo->prepare("INSERT INTO publications (steamid,profile,contenu,ajout,ip) VALUES ('".$user['steamid']."','".$user['steamid']."', :contenu , '".time()."', '".$_SERVER['REMOTE_ADDR']."') ");
        $sql_add_pub->execute(Array("contenu" => $contenu)); ?>

所以我的问题是,我怎样才能用 PDO 解决这个问题?

提前致谢。

【问题讨论】:

  • 警告:使用 PDO 时,您应该使用带有占位符值的 prepared statements,并将任何用户数据作为单独的参数提供。在此代码中,您可能有严重的SQL injection bugs。永远不要使用字符串插值或连接,而是使用 prepared statements 并且永远不要将 $_POST$_GET 数据直接放在查询中。有关此问题和其他问题的指导,请参阅 PHP The Right Way

标签: php html mysql post pdo


【解决方案1】:

首先不要在查询字符串中使用用户输入。使用准备好的语句。这将有助于防止 SQL 注入。

第二次在用户输入上使用 PHP strip_tags 函数。 http://php.net/manual/en/function.strip-tags.php

这将阻止人们注入 HTML。

【讨论】:

  • 非常感谢您,这正是我所需要的,并且现在可以完美运行。我会像你告诉我的那样为用户使用准备好的语句:)
  • 不要随意使用strip_tags。准备好的语句将负责注入。显示内容时需要使用htmlspecialchars(),以避免XSS问题。
  • 不要随意使用strip_tags是什么意思?这当然不是你唯一应该做的事情。它是可以改进用户输入净化的众多方法之一。
猜你喜欢
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 2015-04-30
  • 2013-10-17
  • 1970-01-01
  • 2019-09-27
相关资源
最近更新 更多