2019.4.9
1.英语单词计划(153,154)
2.Oracle学习: ①标量子查询: 返回单行单列的子查询
②成对比较子查询,多列比较子查询,内外交互子查询(相关子查询)的概念
③输入edit或者ed可以进入文本编辑状态,可以编辑修改上一次的查询语句,类似于vi,退出后用/可以执行
④Oracle中的集合运算(union,union all,intersect,minus),集合运算要求两个集合的结构要保持一致,并且只能对第一个查询的列做order by操作
一般操作能用union all的不会用union,因为去重要花费系统资源
3.数据结构学习: ①树的先序,中序,后序遍历,图的深度优先,广度优先遍历的各种不用递归的算法思路
去除递归的核心思路在于,每次递归保存了什么数据,可以通过扩充数据域来去除递归
②查找表: 由同一类型的数据元素(或记录)构成的集合
4.读《白帽子讲Web安全》:
①理解XSS: 假设有一个页面把用户的输入显示出来,例如
<?php
$input = $_GET["param"];
echo "<div>".$input."</div>";
?>
正常情况下的用户输入后的url: http://www.a.com/test.php?param=你好! ,页面也会只输出一句话你好
但是如果这样提交 : http://www.a.com/test.php?parm=<script>alert(/xss/)</script> , 则会执行JS脚本,这是反射型的XSS
②存储型的XSS:例如某个黑客写下一篇包含恶意JS代码的博客,那么所有访问者都会受到危害。这样保存在服务器端的XSS就是存储型XSS
③DOM Based XSS : 通过修改页面DOM节点形成的XSS
ps: 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model),它将网页转化为一个Javascript对象,
从而用Javascript脚本进行各种操作(比如增删元素等),获得了足够的能力来创建动态的 HTML。
在 HTML DOM 中,所有事物都是节点。DOM 是被视为节点树的 HTML。
ps: XSS的利用需要深厚的JavaScript功底,所以书中的具体利用和构造技巧日后再看
④XSS的防御思路: (1)设置HttpOnly属性防止JavaScript读取Cookie ,但是这不能防御攻击者利用AJAX来构造Http请求等其他利用方法
(2)输入检查,但是如何保证用户体验,还有输入URL时又如何处理呢?
(3)输出检查,使用HtmlEncode或者JavascriptEncode
>要求escapeJavacript()的变量输出一定要在引号内,否则使用JavascriptEncode()函数,将除了数字和字母外的所有字符,都使用16进制编码
ps: 书上原话是要求JavacriptEncode的变量输出一定要在引号内,个人认为结合上下文可能有误,代验证
⑤正确的XSS防御思路: (1)在Html标签中输出 ----> 使用HtmlEncode
(2)在Html属性中输出 ----> 使用HtmlEncode
(3)在script标签中输出 ----> 使用JavascriptEncode (首先要确保变量在引号中)
(4)在事件中输出 ----> 使用JavascriptEncode
(5)在URL中输出 ----> 使用URLEncode (首先检查变量开头,无http则自动添加,防止伪协议攻击)
处理富文本:使用白名单策略,屏蔽所有危险的标签,如<iframe>,<script>,<style>,<form>等
处理DOM XSS: 在变量输出到<script>时,执行一次JavascriptEncode,其次在document.write输出到HTML页面时,输出到事件或者脚本,则再一次JavascriptEncode,输出到HTML内容或者属性时,则HtmlEncode