【发布时间】:2011-12-27 16:14:59
【问题描述】:
我一直在使用下面的代码块来阻止 sql 注入。这是我刚开始 php 时有人给我看的东西(不久前)
我把它放在每一页上,就像打开的一样。我想知道它是否有效?我不知道如何测试 sql 注入
<?php
//Start the session
session_start();
//=======================open connection
include ('lib/dbconfig.php');
//===============This stops SQL Injection in POST vars
foreach ($_POST as $key => $value) {
$_POST[$key] = mysql_real_escape_string($value);
}
foreach ($_GET as $key => $value) {
$_GET[$key] = mysql_real_escape_string($value);
}
我的典型插入和更新查询如下所示
$insert = ("'$email','$pw','$company', '$co_description', '$categroy', '$url', '$street', '$suite', '$city', '$state', '$zip', '$phone', '$date', '$actkey'");
mysql_query("INSERT INTO provider (email, pw, company, co_description, category, url, street, suite, city, state, zip, phone, regdate, actkey) VALUES ($insert)") or die ('error ' . mysql_error());
mysql_query("UPDATE coupon SET head='$_POST[head]', fineprint='$_POST[fineprint]', exdate='$exdate', creationdate=NOW() WHERE id='$cid'") or die ('error ' . mysql_error());
【问题讨论】:
-
看来你的代码没问题,但方法太错误了。自早期 PHP 的结婚时代以来,世界就在进步。使用 PDO/MySQLI。使用参数化查询,使用单个访问点进入您的数据库...
-
感谢您的回答,请原谅我的无知,但您能否详细说明单个接入点。在我当前的项目中,我访问每个页面上的数据库进行条目和查询。这是不正确的?
-
我通常有一个类来管理与数据库的连接和低级操作(例如对数据库运行查询并取回结果)。在此之上我还有另一层,负责获取不同格式的请求并将其转换为 SQL,该层也是唯一清理数据的层,我总是使用该类来创建 sql。这样我很确定我不会受到 SQL 注入的影响,如果不是,我只需要在一个地方解决这个问题。
标签: php mysql sql-injection code-injection