大部分网站都包含搜索功能,根据用户搜索的词去执行服务端的业务逻辑。如果一些黑客在搜索参数包含链接(a)、嵌入其他网页(iframe)、前端代码(script)等html字符,再加上服务端php不加任何处理去解析或者展示了用户请求的参数,就可能出现跨站点脚本(XSS),链接注入,框架注入等安全漏洞。
下面通过直接判断请求字符串是否包含html标记,去屏蔽非法请求,从而杜绝这类攻击。
// 搜索的php处理页面,如搜索关键词参数为s
$s = $_GET['s'];
if (preg_match('/<[^>]+>/', $s) || preg_match('/<[^>]+>/', htmlspecialchars_decode($s))) {
// echo "搜索的关键词不能包含HTML标签";
echo "非法参数";
exit();
}
// 不包含HTML标签,后续继续原由的处理……