Joe*_*Joe 5 php mysql sql database security
我正在构建一个数据库类,并认为合并某种形式的SQL注入预防是个好主意(呃!).这是运行数据库查询的方法:
class DB
{
var $db_host = 'localhost';
var $db_user = 'root';
var $db_passwd = '';
var $db_name = 'whatever';
function query($sql)
{
$this->result = mysql_query($sql, $this->link);
if(!$this->result)
{
$this->error(mysql_error());
} else {
return $this->result;
}
}
}
Run Code Online (Sandbox Code Playgroud)
课堂上还有更多,但我只是因为这个而削减它.我面临的问题是,如果我只是使用mysql_real_escape_string($sql, $this->link);它然后它会逃避整个查询并导致SQL语法错误.如何动态查找需要转义的变量?我想避免mysql_real_escape_string()在我的主代码块中使用,我宁愿在函数中使用它.
谢谢.
防止SQL注入攻击的整体思路是防止用户运行自己的SQL。在这里,看起来你想让用户运行自己的SQL,那么为什么要限制他们呢?
或者,如果您不允许用户将 SQL 传递到 query() 方法中。对于实现转义参数来说,这个级别太低了。正如您所意识到的,您只想转义参数,而不是整个 SQL 语句。
如果对 SQL 进行参数化,则可以仅转义参数。在这种情况下,我假设用户可以影响参数的值,而不是 SQL。
查看 PDObindParam()或 Zend_DB 的query()方法,了解如何在其他数据库接口中实现这一点。