文章作者:Langy 译文作者:riusksk 在PHP中修补XSS漏洞,我们可以使用三个PHP函数。 这些函数主要用于清除HTML标志,这样就没办法注入代码了。使用更多的函数是htmlspecialchars() ,它可以将所有的"<"与">"符号转换成"&lt;" 与"&gt;"。其它可供选择的函数还有htmlentities(), 它可以用相应的字符实体(entities)替换掉所有想要替换掉的特征码(characters)。 PHP Code:
3
$input
=
'<script>alert(1);</script>'
;
4
echo
htmlspecialchars(
$input
) .
'<br />'
;
5
echo
htmlentities(
$input
);
htmlentities()的另一个例子 PHP Code:
2
$str
=
"A 'quote' is <b>bold</b>"
;
3
echo
htmlentities(
$str
);
4
echo
htmlentities(
$str
, ENT_QUOTES);
第一个显示: A 'quote' is &lt;b&gt;bold&lt;/b&gt; 第二个显示:A 'quote' is &lt;b&gt;bold&lt;/b&gt; htmlspecialchars()使用实例 PHP Code:
2
$new
= htmlspecialchars(
"<a href='test'>Test</a>"
, ENT_QUOTES);
显示: &lt;a href='test'&gt;Test&lt;/a&gt; strip_tags()函数代替.删除所有的HTML元素(elements),除了需要特别允许的元素之外,如:<i>, <b> 或<p>. strip_tags()使用实例 PHP Code:
2
$text
=
'<p>Test paragraph.</p><!-- Comment --> Other text'
;
3
echo
strip_tags
(
$text
);
6
echo
strip_tags
(
$text
,
'<p>'
);
现在我们至少已经知道有这些函数了,当我们发现我们的站点存在XSS漏洞时就可以使用这些代码了。我最近在我的站点上的GoogleBig(一个Mybb论坛的插件)视频部分发现了一个XSS漏洞,因此我就在想如何使用这些函数写段代码来修补这个搜索漏洞。 首先我发现问题出在search.php这一文件上,现在让我们看看这个查询及输出查询结果中的部分代码研究一下: PHP Code:
01
function
search(
$query
,
$page
)
03
global
$db
,
$bgcolor2
,
$bgcolor4
,
$sitename
,
$io_db
,
$module_url
,
$list_page_items
,
$hm_index
;
04
$option
= trim(
$option
);
05
$query
= trim(
$query
);
06
$query
= FixQuotes(
nl2br
(filter_text(
$query
)));
07
$db
->escape_string(
$query
);
08
$db
->escape_string(
$option
);
在这种情况下,我们通过使用$query这一值作为变量,然后使用htmlentities()这一函数: PHP Code:
1
$query
= FixQuotes(
nl2br
(filter_text(htmlentities(
$query
))));
如果你对这三种函数还有有疑问可以使用PHP手册来查看: http://it.php.net/htmlentities
http://it2.php.net/htmlspecialchars
http://it2.php.net/strip_tags