2017-11-04 15:07
页面的XSS注入也是很常见的一个注入漏洞,以PHP为例:
如果你要把用户输入的数据输出到HTML上下文中,应该这样:
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
如果你要把用户输入的数据输出到JS上下文<script></script>中,应该这样:
echo json_encode($user_input, JSON_HEX_TAG|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_HEX_AMP);
其中JSON编码要求使用UTF-8.
2017-11-04 15:04

引用来自“eechen”的评论

$place_holders = implode(',', array_fill(0, count($ids), '?'));
$sql = "SELECT * FROM `{$table}` WHERE `id` IN ({$place_holders})";
$stmt = $db->prepare($sql); // 预处理
$stmt->execute($ids); // 参数化查询
原生PDO预处理参数化查询就2句的事,为什么WordPress还会搞出SQL注入来么?

引用来自“绫小路清隆”的评论

用预处理就一定不会有注入问题德玛?
预处理下,SQL模板和参数是分离的,所以当然能防御SQL注入.
有些数据库(如SQLite)不支持预处理,所以PHP也支持模拟预处理.
模拟预处理下,参数会被PHP转义,而正确转义的前提是指定了编码:
PDO: PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
MySQLi: $mysqli->set_charset('utf8');
2017-11-04 14:39

引用来自“eechen”的评论

$place_holders = implode(',', array_fill(0, count($ids), '?'));
$sql = "SELECT * FROM `{$table}` WHERE `id` IN ({$place_holders})";
$stmt = $db->prepare($sql); // 预处理
$stmt->execute($ids); // 参数化查询
原生PDO预处理参数化查询就2句的事,为什么WordPress还会搞出SQL注入来么?
用预处理就一定不会有注入问题德玛?
2017-11-04 10:20
$place_holders = implode(',', array_fill(0, count($ids), '?'));
$sql = "SELECT * FROM `{$table}` WHERE `id` IN ({$place_holders})";
$stmt = $db->prepare($sql); // 预处理
$stmt->execute($ids); // 参数化查询
原生PDO预处理参数化查询就2句的事,为什么WordPress还会搞出SQL注入来么?
回复 @
{{emojiItem.symbol}}
返回顶部
顶部