sql注入
mysql_real_escape_string和addslashes的区别
addslashes为通常令人不安的字符添加斜杠。 mysql_real_escape_string转义MySQL需要转义的任何东西。这可能是比addslashes处理的更多或更少的字符。
我相信你应该总是使用你的mysql提供的转义函数而不是addslashes,因为addslashes可能做太多或没有足够的工作来达到你使用它的目的。
sqlmap扫描sql注入
python sqlmap.py --flush-session -u "http://xxx.xxx.com/xxx/xxx?areaid=1" --dbms MySQL
对于mysql而言,只需要
处理查询时的where语句:
$v = addslashes($v);
$cond .= "{$field} = '{$v}' ";
处理插入或更新时的data,
if (is_null($value)) {
$exprs[] = "`{$field}`= NULL";
} else {
$value = $this->conn->escapeString($value); // 这里是real_escape_string
$exprs[] = "`{$field}`='{$value}'";
}
对于postgresql而言
pg_escape_string函数,比addslashes要好。
前者会把 ' 变成 ''
普通的转义,这样的语句防不住。
select areaid,name,lvl from admindb.tar_area where parent='1\';SELECT PG_SLEEP(5)--';
而且,我们发现,pgsql存数据的时候,会自动unescape一次。