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. Java 悲观锁 synchronized (member){代码块}

    Java 如果遇到会出现高并发的情况,一般建议使用悲观锁 :synchronized (member){代码块}  需要对数据库进行修改或新增的时候,建议写上事务--@Transactional @T ...

  2. 没事学学KVM(二)创建一台虚拟机

    首先通过VMware创建一台虚机,建议内存大于1G,并开启CPU 的inter vt-x功能,安装好对应的软件后,yum install -y qemu-kvm* virt-* libvirt* 准备 ...

  3. okhttp的Post方式

    发送post请求 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bun ...

  4. D. Kilani and the Game 解析(裸BFS、實作)

    Codeforce 1105 D. Kilani and the Game 解析(裸BFS.實作) 今天我們來看看CF1105D 題目連結 題目 給一個\(n\times m\)的地圖,地圖上有幾種格 ...

  5. puk2367 拓扑排序

    Description The system of Martians' blood relations is confusing enough. Actually, Martians bud when ...

  6. vue路由传参及组件传参和组件方法调用

    VUE路由和组件传参 第一种vue自带的路由传参的三种基本方式 1.通过name :id传参 子组件通过$route.name接收参数 { path: '/particulars/:id', name ...

  7. AQS源码深入分析之独占模式-ReentrantLock锁特性详解

    本文基于JDK-8u261源码分析 相信大部分人知道AQS是因为ReentrantLock,ReentrantLock的底层是使用AQS来实现的.还有一部分人知道共享锁(Semaphore/Count ...

  8. APIview + Serializers

    1.APIview使用   https://www.cnblogs.com/xiaonq/p/10124104.html https://www.cnblogs.com/xiaonq/p/109878 ...

  9. django支持多语言

    Django支持多语言切换 下面介绍下如何使网站或APP国际化,让其支持多种语言 . 官网 效果 1.创建locale文件夹 先在项目根目录下创建一个名为locale的文件夹,这个文件夹是用来存放dj ...

  10. 令人惊叹的百度Echarts,大数据分析的必备工具

    学习目录 1.可视化面板介绍     1.1技术要点     1.2案例适配方案     1.3页面主体布局2.Echarts(重点)     2.1echarts介绍     2.2echarts体 ...