当前位置: 首页 > 网络学院 > 服务端脚本教程 > PHP > PHP 跨站点脚本攻击

PHP
PHP Libxml
PHP Math
PHP Misc
PHP MySQL
PHP SimpleXML
PHP String
PHP XML
PHP Zip
PHP Mail
用PHP5的DirectoryIterators递归扫描目录
PHP 阻止SQL注入式攻击
PHP5面向对象 - 基础 - 类和对象
PHP5面向对象 - 基础 - 类的属性( public )
PHP5面向对象 - 基础 - 类的属性( private )
PHP5面向对象 - 基础 - 方法
PHP5面向对象 - 基础 - 对象的比较
php5面向对象 - 基础 - 构造函数
php5面向对象 - 基础 - 析构函数
用PHP控制用户的浏览器 - ob*函数的使用
PHP PDO 学习笔记

PHP 跨站点脚本攻击


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-03-01   浏览: 793 ::
收藏到网摘: n/a

跨站点脚本(XSS)攻击中,往往有一个恶意用户在表单中(或通过其他用户输入方式)输入信息,这些输入将恶意的客户端标记插入过 程或数据库中。例如,假设站点上有一个简单的来客登记簿程序,让访问者能够留下姓名、电子邮件地址和简短的消息。恶意用户可以利用这个机会插入简短消息之 外的东西,比如对于其他用户不合适的图片或将用户重定向到另一个站点的 JavaScript,或者窃取 cookie 信息。

幸运的是,PHP 提供了 strip_tags() 函数,这个函数可以清除任何包围在 HTML 标记中的内容。strip_tags() 函数还允许提供允许标记的列表,比如 <b><i>

清单 16 给出一个示例,这个示例是在前一个示例的基础上构建的。


清单 16. 从用户输入中清除 HTML 标记


<?php
if ($_POST['submit'] == "go"){
//清除标签
$name = strip_tags($_POST['name']);
$name = substr($name,0,40);
//清除16进制字符
$name = cleanHex($name);
//continue processing....
}

function cleanHex($input){
$clean = preg_replace\
("![\][xX]([A-Fa-f0-9]{1,3})!", "",$input);
return $clean;
}
?>


<form action=\
"<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<p><label for="name">Name</label>
<input type=\
"text" name="name" id="name" size="20" maxlength="40"/></p>

<p><input type="submit" name="submit" value="go"/></p>
</form>

 

从安全的角度来看,对公共用户输入使用 strip_tags() 是必要的。如果表单在受保护区域(比如内容管理系统)中,而且您相信用户会正确地执行他们的任务(比如为 Web 站点创建 HTML 内容),那么使用 strip_tags() 可能是不必要的,会影响工作效率。

还有一个问题:如果要接受用户输入,比如对贴子的评论或来客登记项,并需要将这个输入向其他用户显示,那么一定要将响应放在 PHP 的 htmlspecialchars() 函数中。这个函数将与符号、<> 符号转换为 HTML 实体。例如,与符号(&)变成 &amp;。这样的话,即使恶意内容躲开了前端 strip_tags() 的处理,也会在后端被 htmlspecialchars() 处理掉。

评论 (0) All

登陆 | 还没注册?