HTML Injection - Stored (Blog)

界面

  1 <div id="main">
2
3 <h1>HTML Injection - Stored (Blog)</h1>
4
5 <form action="<?php echo($_SERVER["SCRIPT_NAME"]);?>" method="POST">
6
7 <table>
8
9 <tr>
10
11 <td colspan="6"><p><textarea name="entry" id="entry" cols="80" rows="3"></textarea></p></td>
12
13 </tr>
14
15 <tr>
16
17 <td width="79" align="left">
18
19 <button type="submit" name="blog" value="submit">Submit</button>
20
21 </td>
22
23 <td width="85" align="center">
24
25 <label for="entry_add">Add:</label>
26 <input type="checkbox" id="entry_add" name="entry_add" value="" checked="on">
27
28 </td>
29
30 <td width="100" align="center">
31
32 <label for="entry_all">Show all:</label>
33 <input type="checkbox" id="entry_all" name="entry_all" value="">
34
35 </td>
36
37 <td width="106" align="center">
38
39 <label for="entry_delete">Delete:</label>
40 <input type="checkbox" id="entry_delete" name="entry_delete" value="">
41
42 </td>
43
44 <td width="7"></td>
45
46 <td align="left"><?php echo $message;?></td>
47
48 </tr>
49
50 </table>
51
52 </form>
53
54 <br />
55
56 <table id="table_yellow">
57
58 <tr height="30" bgcolor="#ffb717" align="center">
59
60 <td width="20">#</td>
61 <td width="100"><b>Owner</b></td>
62 <td width="100"><b>Date</b></td>
63 <td width="445"><b>Entry</b></td>
64
65 </tr>
66
// 上面是html,下面开始是PHP源码

67 <?php
68
69 // Selects all the records
70
71 $entry_all = isset($_POST["entry_all"]) ? 1 : 0;
72
73 if($entry_all == false)
74 {
75
76 $sql = "SELECT * FROM blog WHERE owner = '" . $_SESSION["login"] . "'";
77
78 }
79
80 else
81 {
82
83 $sql = "SELECT * FROM blog";
84
85 }
86
87 $recordset = $link->query($sql);
88
89 if(!$recordset)
90 {
91
92 // die("Error: " . $link->connect_error . "<br /><br />");
93
94 ?>
95 <tr height="50">
96
97 <td colspan="4" width="665"><?php die("Error: " . $link->error);?></td>
98 <!--
99 <td></td>
100 <td></td>
101 <td></td>
102 -->
103
104 </tr>
105
106 <?php
107
108 }
109
110 while($row = $recordset->fetch_object())
111 {
112
113 if($_COOKIE["security_level"] == "1" or $_COOKIE["security_level"] == "2")
114 {
115
116 ?>
117 <tr height="40">
118
119 <td align="center"><?php echo $row->id; ?></td>
120 <td><?php echo $row->owner; ?></td>
121 <td><?php echo $row->date; ?></td>
122 <td><?php echo xss_check_3($row->entry); ?></td>
123
124 </tr>
125
126 <?php
127
128 }
129
130 else
131 {
132
133 ?>
134 <tr height="40">
135
136 <td align="center"><?php echo $row->id; ?></td>
137 <td><?php echo $row->owner; ?></td>
138 <td><?php echo $row->date; ?></td>
139 <td><?php echo $row->entry; ?></td>
140
141 </tr>
142
143 <?php
144
145 }
146
147 }
148
149 $recordset->close();
150
151 $link->close();
152
153 ?>
154 </table>
155
156 </div>

感觉防护代码这有点问题,我没看明白

 1 function htmli($data)
2 {
3
4 include("connect_i.php"); //链接数据库
5
6 switch($_COOKIE["security_level"]) //检测级别在cookie里
7 {
8
9 case "0" :
10
11 $data = sqli_check_3($link, $data);
12 break;
13
14 case "1" :
15
16 $data = sqli_check_3($link, $data);
17 // $data = xss_check_4($data);
18 break;
19
20 case "2" :
21
22 $data = sqli_check_3($link, $data);
23 // $data = xss_check_3($data);
24 break;
25
26 default :
27
28 $data = sqli_check_3($link, $data);
29 break;
30
31 }

无论case是几,执行的都是

sqli_check_3()进行过滤

sqli_check_3()的定义是

应该把xss的防御加在这里

1 function sqli_check_3($link, $data)
2 {
3
4 return mysqli_real_escape_string($link, $data);
5
6 }

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。

下列字符受影响:

  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

1.low

级别同时不进行保护

2.medium

xss_check_4进行防xss保护
函数功能为
function xss_check_4($data)
{ // addslashes - returns a string with backslashes before characters that need to be quoted in database queries etc.
// These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte).
// Do NOT use this for XSS or HTML validations!!! return addslashes($data); }

在预定义字符前加反斜杠

预定义字符是:

  • 单引号(')
  • 双引号(")
  • 反斜杠(\)
  • NULL

3.high

xss_check_3功能
 
 1 function xss_check_3($data, $encoding = "UTF-8")
2 {
3
4 // htmlspecialchars - converts special characters to HTML entities
5 // '&' (ampersand) becomes '&amp;'
6 // '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set
7 // "'" (single quote) becomes ''' (or &apos;) only when ENT_QUOTES is set
8 // '<' (less than) becomes '&lt;'
9 // '>' (greater than) becomes '&gt;'
10
11 return htmlspecialchars($data, ENT_QUOTES, $encoding);
12
13 }

htmlspecialchars()功能,将部分字符转化为html字符

bWAPP----HTML Injection - Stored (Blog)的更多相关文章

  1. bWAPP练习--injection篇之HTML Injection - Reflected (GET)

    什么是Injection? injection,中文意思就是注入的意思,常见的注入漏洞就是SQL注入啦,是现在应用最广泛,杀伤力很大的漏洞. 什么是HTML injection? 有交互才会产生漏洞, ...

  2. bWAPP练习--injection篇SQL Injection (GET/Search)

    SQL注入: SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到 ...

  3. bWAPP练习--injection篇之HTML Injection - Reflected (POST)

    POST的和之前的GET的过程差不多,只是表单的提交方式不一样而已. low 我们在表单中填入一个超链接 <a href="http://www.cnblogs.com/ESHLkan ...

  4. webgote的例子(5)Sql注入(Blog)

    SQL Injection - Stored (Blog) (本章内容):留言板的注入 看到这个页面先看以下这个页面是做什么的.进行正常的写入发现我每写一句话,其内容都会写到下面的entry里面 在尝 ...

  5. Angular2经典文章集锦

    Angular Metadata 等基础知识 http://www.jianshu.com/p/aeb11061b82c Metadata告诉Angular如何处理一个类,只有我们将它通告给Angul ...

  6. sqli-labs学习笔记 DAY8

    DAY 8 sqli-lab Page-3 sqli-labs lesson 38 What is Stacked injection? https://blog.csdn.net/Fly_hps/a ...

  7. Web API接口安全了解

    2017版OWASP top 10 将API安全纳入其中,足以说明API被广泛使用且安全问题严重.自己尝试整理一下,但限于本人搬砖经验还不足.水平有限,本文只能算是抛砖引玉,希望大伙不吝赐教. 了解W ...

  8. Metasploitable2使用指南

    Metasploitable2使用指南 Metasploitable2 虚拟系统是一个特别制作的ubuntu操作系统,本身设计作为安全工具测试和演示常见漏洞攻击.版本2已经可以下载,并且比上一个版本包 ...

  9. 前端 跨站脚本(XSS)攻击的一些问题,解决<script>alert('gansir')</script>

    问题1:跨站脚本(XSS)的一些问题,主要漏洞证据: <script>alert('gansir')</script>,对于这个问题怎么解决? (测试应当考虑的前端基础攻击问题 ...

随机推荐

  1. Python之dict字典详解

    Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,字典是另 一种可变容器模型,且可存储任意类型对象.具有极快的查找速度. 字典是一种通过名字或者关键字 ...

  2. C#之txt的数据写入

    一.背景 小伙伴们在使用C#开发时,可能需要将一些信息写入到txt,这里就给大家介绍几种常用的方法. 二.思路 2.1将由字符串组成的数组写入txt 此种方法不需要使用Flush和Close(). 如 ...

  3. ceil中有-0啊

          这里主要是有一点: 1 Math.ceil(d1)  ceil 方法上有这么一段注释:If the argument value is less than zero but greater ...

  4. Mysql JDBC-mysql-Driver queryTimeout分析

    Mysql jdbc的queryTimeout分析 Mysql的jdbc-driver com.mysql.jdbc.Driver 设置queryTimeout方法 com.mysql.jdbc.St ...

  5. 使用Azure静态Web应用部署Blazor Webassembly应用

    上一次演示了如何使用Azure静态web应用部署VUE前端项目(使用 Azure静态web应用+Github全自动部署VUE站点).我们知道静态web应用支持VUE,react,angular等项目的 ...

  6. 使用 Dockerfile 文件但是不使用缓存生成镜像

    前一段时候使用 Dockerfile 重新部署 NetCore3.1 项目的时候很顺利,由来由于一些原因,我把以前的镜像删除,如果我们大家继续使用 docker  build 命令去生成镜像的话就会报 ...

  7. CSS换行和省略号

    换行 原地址:https://www.cnblogs.com/meowcool/p/10130103.html //强制不换行 div{ white-space:nowrap; } //自动换行 di ...

  8. C#3新增语法特性

    C#3,.Net Framework 3.5 ,Visual Studio 2008, CLR 3.0 C#3.0新引进的语法基于.Net Framework 3.5.主要引进的语法:Linq,隐式类 ...

  9. python开发基础(二)运算符以及数据类型之tuple(元组)

    # encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...

  10. jackson、fastjson、kryo、protostuff等序列化工具性能对比

    简介 实际项目中,我们经常需要使用序列化工具来存储和传输对象.目前用得比较多的序列化工具有:jackson.fastjson.kryo.protostuff.fst 等,本文将简单对比这几款工具序列化 ...