确保 PHP 应用程序的安全六

跨站点脚本攻击

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

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

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


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

<? php
if  ( $_POST [ ' submit ' ==   " go " ){
    
// strip_tags
     $name   =   strip_tags ( $_POST [ ' name ' ]);
    
$name   =   substr ( $name , 0 , 40 );
    
// clean out any potential hexadecimal characters
     $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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值