继续问大佬同学要来的作业,这次的研究对象是xss
XSS攻击研究
XSS,全称是Cross Site Scripting(跨站脚本攻击),为了不和CSS名字重叠,于是起了这样的名字。XSS攻击正如名字中提到的那样,在用户访问的web页面中插入我们的恶意脚本,对网站或者其他用户的访问进行干扰,或者泄露一些重要信息,从而达到恶意攻击的目的。
这次的作业提供的源代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| <html> <head> <meta charset="utf-8"> </head> <style type="text/css"> .comment-title{ font-size:14px; margin: 6px 0px 2px 4px; } .comment-body{ font-size: 14px; color:#ccc; font-style: italic; border-bottom: dashed 1px #ccc; margin: 4px; } </style> <script type="text/javascript" src="/js/cookies.js"></script> <body> <form method="post" action="list.php"> <div style="margin:20px;"> <div style="font-size:16px;font-weight:bold;">发表评论</div> <div style="padding:6px;"> 昵称: <br/> <input name="name" type="text" style="width:300px;"/> </div> <div style="padding:6px;"> 评论: <br/> <textarea name="comment" style="height:100px; width:300px;"></textarea> </div> <div style="padding-left:230px;"> <input type="submit" value="POST" style="padding:4px 0px; width:80px;"/> </div> <div style="border-bottom:solid 1px #fff;margin-top:10px;"> <div style="font-size:16px;font-weight:bold;">评论集</div> </div> <?php require('/components/comments.php'); if(!empty($_POST['name'])){ <!--添加新的评论--> addElement($_POST['name'],$_POST['comment']); } <!--展开评论列表--> renderComments(); ?> </div> </form> </body> </html>
|
仔细看会发现,这里提到的
- /js/cookies.js
- /components/comments.php
这两个文件我手上都是没有的…看起来除了搭建环境,还得自己写一点简单的代码…
环境选择
环境选择了wamp,Windows下的Apache+Mysql/MariaDB+Perl/PHP/Python,一组常用来搭建动态网站或者服务器的开源软件,能够快速的搭建在本地的服务
代码编写
其实说起来,比起写代码,xss好像更简单一点,但是既然要实现这个功能,那么还是得写一下这几个文件的。。由于本人web白痴,接下来写的都是些简单的学习过程,想要继续看实验过程的请跳过。。。
Cookies.js
上w3cshool中了解到,一般js中会在这个文件中写一些关于cookie存储和读取的函数,比如getCookie,checkCookie,setCookie之类的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| function set_cookie(c_name, name, expire_days) { var day = new Date() day.setDate(day.getDate() + expire_days) document.cookie = c_name + "="+escape(name) + ((expire_days == null)? "":";expire_days="+day.toGMTString()) }
function get_cookie(c_name){ if (document.cookie.length>0){ var start = document.cookie.indexOf(c_name + "=") if(start!=-1){ start += c_name.length + 1 var end = document.cookie.indexOf(";", start) if (end == -1) end = document.cookie.length return unescape(document.cookie.substring(start, end)) } } return "" }
function check_cookie(name){ username = get_cookie("name") if(username == ""){ set_cookie("name", name, 1) }
}
|
菜鸡参考着w3cschool写的。。。
这是个php(菜鸡也不会php呀QvQ)从代码上看,我们需要实现两个函数:
- addElement()
- renderComments()
那么我一边学习php一边写一下吧。。。。
addElement的作用应该是将当前的数据加入到一个全局的array变量里面。
renderComments的作用则是将当前的评论输出。
1 2 3 4 5 6 7
| <?php $entries = array(); public function addElement($name='', $comment ='') { $entries[$name] = $comment } ?>
|
后来意识到,渲染这个动作应该是每次提交一次都要进行的,而却更重要的是发现,action会将我们的请求提交到一个叫做list.php的文件里面!这就意味着,我们必须要在list.php中存储数据,然后comments.php只不过是一个展示数据的函数(?)
不管怎么说,逻辑好像都不太对…这里只好先硬着头皮吧renderComments写完:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public function renderComments($value='') { echo "<table border="1">" foreach ($entries as $name =>$comment) { echo "<tr>"; echo "<td>".$entity; echo "<tr>".$comment; echo "</tr>"; } echo "</table>" } ?>
|
好艰难的写完了这一段。。。。后来还发现,php的global对象必须要在函数内生命了global才能够当成全局变量使用