完全像这样(对于MySQL驱动程序):
- 尝试
mysql_real_escape_string()
(99%的情况会是这种情况) - 跌回
mysql_escape_string()
- 跌回
addslashes()
- 通过以下方式手动逃脱
%
并_
处于LIKE
有条件的状态str_replace()
https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/drivers/mysql/mysql_driver.php#L294
function escape_str($str, $like = FALSE){ if (is_array($str)) { foreach ($str as $key => $val) { $str[$key] = $this->escape_str($val, $like); } return $str; } if (function_exists('mysql_real_escape_string') AND is_resource($this->conn_id)) { $str = mysql_real_escape_string($str, $this->conn_id); } elseif (function_exists('mysql_escape_string')) { $str = mysql_escape_string($str); } else { $str = addslashes($str); } // escape LIKE condition wildcards if ($like === TRUE) { $str = str_replace(array('%', '_'), array('\%', '\_'), $str); } return $str;}注意,这只是转义字符,因此MySQL查询不会中断或发生意外情况,并且仅在数据库查询的上下文中使用,以确保基于传递给它的内容正确的语法。
没有任何魔术可以确保所有数据在 任何
上下文(例如HTML,CSV或XML输出)中的安全,并且以防万一您正在考虑它:
xss_clean()不是一种千篇一律的解决方案,也不是100%防弹的,有时实际上是非常不合适的。Active
Record类会自动进行查询转义,但是对于其他所有情况,您应该使用给定上下文的正确方式手动转义/清理数据,并使用 输出 而不是 输入 。



