牛骨文教育服务平台(让学习变的简单)
博文笔记

php XSS攻击原理与防御

创建时间:2017-11-23 投稿人: 浏览次数:300

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

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标签
    ?>

这里写图片描述

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。