XSS 留言板实现-笔记

预备知识

XSS漏洞

  • XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
  • XSS最重要的两个关键词是“跨站”与“脚本”,由于现在网页上最主流的脚本语言是Javascript,所以这里的脚本主要是Javascript
  • 一般,通过XSS攻击,可以获取被攻击者的COOKIE等信息,严重情况,网站管理员受到XSS攻击则攻击者甚至可能获取到管理员权限
  • XSS的类型:
    • 反射型XSS:又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击)。
    • 存储型XSS:又称为持久型跨站点脚本,它一般发生在XSS攻击向量(一般指XSS攻击代码)存储在网站数据库,当一个页面被用户打开的时候执行。每当用户打开浏览器,脚本执行。持久的XSS相比非持久性XSS攻击危害性更大,因为每当用户打开页面,查看内容时脚本将自动执行。谷歌的orkut曾经就遭受到XSS。
    • DOM型XSS:基于DOM的XSS有时也称为type0XSS。当用户能够通过交互修改浏览器页面中的DOM(DocumentObjectModel)并显示在浏览器上时,就有可能产生这种漏洞,从效果上来说它也是反射型XSS。

留言板的简单实现

  • PHP连接MYSQL数据库:
<?php
$servername = "localhost";
$username = "username";
$password = "password";

// 创建连接
$conn = mysqli_connect($servername, $username, $password);

// 检测连接
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "连接成功";
?>
  • SQL查询语句
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
  • SQL插入语句
INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );

毫无防护的留言板代码

<!DOCTYPE HTML>
<?php
//留言处理
if(isset($_GET['message']))
    $getMessage = $_GET['message'];
else {
    $getMessage = "";
}
//全局配置
//数据库配置
$dbhost = 'localhost:3306';  // mysql服务器主机地址
$dbuser = 'root';            // mysql用户名
$dbpass = 'dbpass';          // mysql用户名密码
$dbname = 'dbname';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
    die('Could not connect: ' . mysqli_error());
}
mysqli_select_db($conn,$dbname);
if($getMessage != ""){
    $sql = "INSERT INTO  `bulleting`.`lyb` (`date` ,`content`)VALUES (UTC_TIMESTAMP() ,  '".$getMessage."');";
    $retval = mysqli_query( $conn, $sql );
}
?>
<html>
<head>
    <meta charset="utf-8" />
    <title>XSS留言板</title>
</head>
<body>
    <table border=1 width = 100%>
        <tr>
            <td>日期</td>
    	    <td>内容</td>
        </tr>
        <?php
        // 获取任务
        $sql = "SELECT * FROM  `lyb` ";
        $retval = mysqli_query( $conn, $sql );
        if(! $retval )
        {
            die('无法读取数据: ' . mysqli_error($conn));
        }
        while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC))
        {
            echo "<tr><td> {$row['date']}</td> ".
                 "<td>{$row['content']} </td> ".
                 "</tr>";
        }
        ?>
        <?php
        mysqli_close($conn);
        ?>
    </table>
    <form action="index.php" method="get">
        内容:
        <textarea id="message" name="message"></textarea>
        <br />
        <input type="submit"></input>
    </form>
</body>
</html>
  • 测试截图:



  • 存储型XSS检测代码:
<script>alert('/xss/');</script>
  • DOM型XSS检测代码:
<img src="xxx" onerror=alert("/xss/");>
  • 反射型XSS效果与存储型XSS和DOM型XSS差不多,唯一的差别是反射型XSS直接把GET中的参数显示在网页上,没有经过数据库,而存储型XSS是先存储到服务器上,再回显到网页的。

对XSS的初步防御

  • 过滤标签符号,由于留言板并不需要html标签的输入,所以,我们可以放心地把所有HTML标签全部过滤。
  • 代码:
$getMessage = addslashes($getMessage);
$getMessage = str_replace("<", "&lt;",$getMessage);
$getMessage = str_replace(">", "&gt;",$getMessage);

XSS留言板实现的更多相关文章

  1. AngularJs学习笔记(制作留言板)

    原文地址:http://www.jmingzi.cn/?post=13 初学Anjularjs两天了,一边学一边写的留言板,只有一级回复嵌套.演示地址 这里总结一下学习的过程和笔记.另外,看看这篇文章 ...

  2. dd——留言板再加验证码功能

    1.找到后台-核心-频道模型-自定义表单 2.然后点击增加新的自定义表单 diyid 这个,不管他,默认就好 自定义表单名称 这个的话,比如你要加个留言板还是投诉建议?写上去呗 数据表  这个不要碰, ...

  3. asp.net留言板项目源代码下载

    HoverTree是一个asp.net开源项目,实现了留言板功能. 前台体验网址:http://hovertree.com/guestbook/ 后台请下载源代码安装. 默认用户名:keleyi 默认 ...

  4. html的留言板制作(js)

    这次留言板运用到了最基础的localstorage的本地存储,展现的效果主要有: 1.编写留言2.留言前可以编辑自己的留言昵称.不足之处: 1.未能做出我喜欢的类似于网易的叠楼功能. 2.未能显示评论 ...

  5. 11月8日PHP练习《留言板》

    一.要求 二.示例页面 三.网页代码及网页显示 1.denglu.php  登录页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...

  6. [课程设计]Scrum 3.7 多鱼点餐系统开发进度(留言板选择方案)

    Scrum 3.7 多鱼点餐系统开发进度(留言板选择方案) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统W ...

  7. [课程设计]Scrum 3.6 多鱼点餐系统开发进度(用户测试反馈页面构思&留言板设计)

    Scrum 3.6 多鱼点餐系统开发进度(用户测试反馈页面构思&留言板设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团 ...

  8. 用 Express4 写一个简单的留言板

    Knowledge Dependence:阅读文本前,你需要熟悉 Node.js 编程.Express 以及相关工具和常用中间件的使用. Node.js 以其单线程异步非阻塞的特点,越来越被广大的 W ...

  9. 个人网页的留言板实现与sae的数据库账户配置

    个人网页(github)的留言板终于搞定了.总之后端的东西不会写,只有修改以前教程里面的文件.记录一下重要的过程. 使用了留言保存的send()函数,模版有注册登录功能.根据需求修改了一下,去掉了登录 ...

随机推荐

  1. Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解

    在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构struct timeval{time_t tv_sec; ...

  2. LeetCode36.有效的数独 JavaScript

    判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 ...

  3. Xcode12 libstdc-.6.0.9.tbd问题

    https://github.com/Kila2/libstdc-.6.0.9.tbd # libstdc-.6.0.9.tbd libstdc++.6.0.9.tbd # for device pu ...

  4. ABP 开发(一)

    rh 最近搞Angular ,使用Abp+Angular建项目,遇到部分问题,记录一下,以备查: 一.Abp官网: https://aspnetboilerplate.com/ 点Get starte ...

  5. echarts通过ajax动态获取数据的方法

    echarts表格的数据一般都需要动态获取,所以总结了一下通过ajax动态获取数据的操作: 插入的方法应该不止一种,我也是接触不久,所以刚学会了一种插入方法: 灵感和经验来自:https://www. ...

  6. html网站meta标签大全

    案例 一.天猫 <meta charset="utf-8"> <title>天猫TMALL</title> <meta name=&quo ...

  7. phporjquery生成二维码

    一.php生成二维码 下载文章末尾链接中phpcode文件 include "./phpqrcode/qrlib.php"; //QRcode::png('http://www.b ...

  8. Hadoop源码学习笔记之NameNode启动场景流程四:rpc server初始化及启动

    老规矩,还是分三步走,分别为源码调用分析.伪代码核心梳理.调用关系图解. 一.源码调用分析 根据上篇的梳理,直接从initialize()方法着手.源码如下,部分代码的功能以及说明,已经在注释阐述了. ...

  9. 树莓派3B+学习笔记:10、使用SSH连接树莓派

    SSH(Secure Shell)是一种能够以安全的方式提供远程登录的协议,也是目前远程管理Linux系统的首选方式. 1.开启树莓派3B+的SSH远程管理功能,在终端中输入以下命令: sudo ra ...

  10. Python学习 :多线程

    多线程 什么是线程? - 能独立运行的基本单位——线程(Threads). - 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位. - 一条线程指的是进程中一个单一 ...