php XSS攻击原理与防御

来源:互联网 发布:软件研发部 考核指标 编辑:程序博客网 时间:2024/05/16 09:09

数据安全是软件设计中要考虑的问题,在程序中保持数据的安全,除了保证代码内部运行的可靠,最主要就是严格控制外部数据,秉持一切用户输入的都是不可靠的原则,做好数据的验证和过滤.

PHP最简单的过滤机制就是转义,对用户的输入和输出进行转义和过滤.

我们先搞一个例子:
下面是一个很简单的表单

    <form action="" method="post">        留言:<textarea name="content" rows="20" cols="40"></textarea>        <input type="submit" value="提交">    </form>    <?php        echo $_POST['content'];    ?>

在文本区域内输入

<style>body{background:#000}</style>

点击提交,会发现浏览器除了输入框外都变成黑色的.查看页面源代码,会发现是因为原样地输出了css代码.这其实就是XSS攻击

XSS攻击百度百科:

XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中

XSS攻击当然不是我们这里所写的添加CSS样式代码这么低端.它可以做到很多危害

1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马
7、控制受害者机器向其它网站发起攻击

最简单地处理以上的问题,只需要在接受数据处理的时候用上过滤函数htmlspecialchars,这个函数会把代码中的特殊字符转义成HTML实体,输出的时候就不会影响页面了

<?php        echo htmlspecialchars($_POST['content']);    ?>

还有一种方法是直接过滤掉html标签,这里要用到正则表达式

<?php        // echo htmlspecialchars($_POST['content']);        $rege = '/<\/?[^>]+>/';        $result = preg_replace($rege,"",$_POST['content']);        echo $result;    ?>

PHP提供了一个内置的strip_tags函数可以出去字符串中HTML和PHP标签,仅保留参数中指定的标签

<?php        $str = '<p>Test parjlkasdf </p><a href="#test">Other text</a>';        echo strip_tags($str);        echo "</br>";        echo strip_tags($str,'<p> <a>');//允许p标签和a标签    ?>

这里写图片描述

原创粉丝点击