您的位置:首页 > 编程语言 > PHP开发

如何在php中修补XSS漏洞

2011-12-20 15:14 495 查看
文章作者:Langy

译文作者:riusksk

在PHP中修补XSS漏洞,我们可以使用三个PHP函数。

这些函数主要用于清除HTML标志,这样就没办法注入代码了。使用更多的函数是htmlspecialchars() ,它可以将所有的"<"与">"符号转换成"&lt;" 与"&gt;"。其它可供选择的函数还有htmlentities(),它可以用相应的字符实体(entities)替换掉所有想要替换掉的特征码(characters)。

PHP Code:

1
<?
2
//
这里的代码主要用于展示这两个函数之间输出的不同
3
$input
=
'<script>alert(1);</script>'
;
4
echo
htmlspecialchars(
$input
)
.
'<br
/>'
;
5
echo
htmlentities(
$input
);
6
?>;
htmlentities()的另一个例子

PHP Code:

1
<?php
2
$str
=
"A
'quote' is <b>bold</b>"
;
3
echo
htmlentities(
$str
);
4
echo
htmlentities(
$str
,
ENT_QUOTES);
5
?>;
第一个显示: A 'quote' is &lt;b&gt;bold&lt;/b&gt;

第二个显示:A 'quote' is &lt;b&gt;bold&lt;/b&gt;

htmlspecialchars()使用实例

PHP Code:

1
<?php
2
$new
=
htmlspecialchars(
"<a
href='test'>Test</a>"
,
ENT_QUOTES);
3
echo
$new
;
4
?>;
显示: &lt;a href='test'&gt;Test&lt;/a&gt;

strip_tags()函数代替.删除所有的HTML元素(elements),除了需要特别允许的元素之外,如:<i>,<b> 或<p>.

strip_tags()使用实例

PHP Code:

1
<?php
2
$text
=
'<p>Test
paragraph.</p><!-- Comment --> Other text'
;
3
echo
strip_tags
(
$text
);
4
echo
"\n"
;
5
//
allow <p>
6
echo
strip_tags
(
$text
,
'<p>'
);
7
?>;
现在我们至少已经知道有这些函数了,当我们发现我们的站点存在XSS漏洞时就可以使用这些代码了。我最近在我的站点上的GoogleBig(一个Mybb论坛的插件)视频部分发现了一个XSS漏洞,因此我就在想如何使用这些函数写段代码来修补这个搜索漏洞。

首先我发现问题出在search.php这一文件上,现在让我们看看这个查询及输出查询结果中的部分代码研究一下:

PHP Code:

01
function
search(
$query
,
$page
)
02
{
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
);
09
alpha_search(
$query
);
10
...
在这种情况下,我们通过使用$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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: