我想听听您对我的代码的看法。它对任何注射都足够安全吗?感谢您的回复。
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']
));
}
}
使用查询参数足以使其免受 SQL 注入漏洞的影响。
调用 htmlspecialchars 和 strip_tags 的代码与 SQL 注入无关。可能需要它来防止跨站点脚本漏洞,但这是一个单独的问题。我不建议在将数据插入数据库时执行这些步骤。只需在输出到 HTML 时过滤 XSS 漏洞即可。否则,你会得到存储在数据库中的文字&
序列,这还为时过早。您不一定每次都使用数据在 HTML 中显示。只需在输出时对其进行编码,而不是在输入时对其进行编码。
我从不费心补偿可能magic_quotes_gpc。在部署应用时对其进行测试,并中止部署。任何 PHP 实例在 2014 年设置magic_quotes_gpc都是无效的。