Linux日志
PHP记事本
JS记事本
数据库
团队资讯

php自带函数防范跨脚本(XSS)攻击

分类:PHP记事本 发布时间:2017-05-30 10:39:44 阅读:作者:郑祥景

    strip_tags:删除html标签,仅在一些无害化的地方进行使用

    重点记录下htmlspecialchars的安全使用:

    一、默认未过滤单引号问题

    htmlspecialchars需要加上ENT_QUOTES才可以过滤单引号,如果不加可能在类似以下场景中被绕过:

url:

xss.php?name=‘onmouseover’=alert(1);

php代码:

<?php
$name = $_GET["name"];
$name = htmlspecialchars($name);
?>

<input type='text' value='<?php echo $name; >'>

解决,加上ENT_QUOTES,过滤单引号:

$name = htmlspecialchars($name, ENT_QUOTES);

    二、js直接输出绕过风险

    url:

xss.php?name=alert(1);

    php代码:

<meta http-equiv=Content-Type content="text/html;charset=gbk">
<script src="/Public/jquery-1.11.3.min.js"></script>
<?php
$name = $_GET["name"];
$name = htmlspecialchars($name);
echo "<script type='text/javascript'>
$(document).ready(function(){
$('#text').html(".$name.");
})
</script>";
?>
<p id='text'></p>

    解决,将输出到html的代码加上json_encode:

$('#text').html(".json_encode($name).");


    以上内容重点在于理解跨脚本攻击的一些形式,启发如何防范的思路。

    附带htmlspecialchars的flags列表,详见php文档

有效的 flags 常量
常量名称描述
ENT_COMPAT会转换双引号,不转换单引号。
ENT_QUOTES既转换双引号也转换单引号。
ENT_NOQUOTES单/双引号都不转换
ENT_IGNORE静默丢弃无效的代码单元序列,而不是返回空字符串。 不建议使用此标记, 因为它» 可能有安全影响
ENT_SUBSTITUTE替换无效的代码单元序列为 Unicode 代替符(Replacement Character), U+FFFD (UTF-8) 或者 &#xFFFD; (其他),而不是返回空字符串。
ENT_DISALLOWED为文档的无效代码点替换为 Unicode 代替符(Replacement Character): U+FFFD (UTF-8),或 &#xFFFD;(其他),而不是把它们留在原处。 比如以下情况下就很有用:要保证 XML 文档嵌入额外内容时格式合法。
ENT_HTML401以 HTML 4.01 处理代码。
ENT_XML1以 XML 1 处理代码。
ENT_XHTML以 XHTML 处理代码。
ENT_HTML5以 HTML 5 处理代码。


  

   编辑:郑祥景

[随享社区版权所有 未经许可不得转载 ]

返回首页


推荐
Linux日志
PHP记事本
JS记事本
数据库
团队资讯
在线客服随享宝宝
有任何问题,都可以戳我反馈哦!
微信公众号 方便 快速
扫描二维码 关注公众号

版权所有:天妖云/随享社区V5.2 beta Copyright 2015-2019 TIAYO.COM Inc. All rights reserved.