我的PDO INSERT INTO足够安全吗?

时间:2014-11-20 14:25:40

标签: php mysql security pdo code-injection

我希望您对我的代码有所了解。对任何注射都足够安全。 谢谢你的回复。

class Product extends DB {

  public function __construct() {
    $db = $this->DB();

    if(isset($_POST['productName'])) {
        foreach ($_POST as $key => $value) {
            if (ini_get('magic_quotes_gpc'))
                $_POST[$key] = stripslashes($_POST[$key]);
                $_POST[$key] = htmlspecialchars(strip_tags($_POST[$key]));
        }
        $this->AddProduct();
    }
  }

  public function AddProduct() {
    $sSQL = "INSERT INTO ".PREFIX."product (productName, productPrice) 
                VALUES (:productName,:productPrice)";
    $query = $this->db->prepare($sSQL);
    $query->execute(array(
        ":productName" => $_POST['productName'],
        ":productPrice" => $_POST['productPrice']
    )); 
  }
}

1 个答案:

答案 0 :(得分:3)

使用查询参数足以使其免受SQL注入漏洞的攻击。<​​/ p>

调用htmlspecialchars和strip_tags的代码与SQL注入无关。可能需要它来防止跨站点脚本漏洞,但这是一个单独的问题。我建议您在将数据插入数据库时​​执行这些步骤。只需在输出到HTML时过滤XSS漏洞。否则,您将获得存储在数据库中的文字&amp;序列,这​​是不成熟的。您不一定每次都要使用HTML显示数据。只需在输出时对其进行编码,而不是在输入时进行编码。

我从不打扰补偿可能的magic_quotes_gpc。部署应用程序时对其进行测试,并中止部署。 2014年任何 PHP实例设置magic_quotes_gpc无效。