1:case
1.1:sql注入
<form url="./" method = 'post'>
sql注入:<input name ="escape">
<input type="submit">
</form>
sql注入:<input name ="escape">
<input type="submit">
</form>
//php
$deleteSql = "DELETE FROM article where title = '".$_POST['escape']."'";
//php 接收zzzc ' or ' 1 = 1 后就会 执行DELETE FROM article where title = 'zzzc ' or ' 1 = 1'
处理:mysqli_real_escape_string (此处只说和转义有关的处理,详情见《白帽子说安全》注入攻击)
DELETE FROM article where title = 'zzzc \' or \' 1 = 1'
1.2:xss
比如 去网站评论时用户输入
<script>
alert('恭喜你中了500万');
setTimeout(window.location.href="https://www.zouzhenzhong.com",1000)
</script>
网站把用户信息存入数据库又不做转义处理。
这个被评论的页面以后就弹窗跳转啦。
处理:富文本白名单处理。(xss更多资料看《白帽子说安全》xss)
只允许<a>,<img>,<div>这些安全标签存在。而其他标签遇到<>一律转义< >(htmlspecialchars($string,ENT_QUOTES )) 处理
1.3 : 页面特殊字符 :展示 pk html标签
让下面代码 展示绿色的 111 <p style="color:green"> 222 </p>
如 去网站评论时用户输入
<p style="color:green">
111
<p style="color:green">
222
</p>
</p>
处理
<p style="color:green">
111
<p style="color:green">
222
</p>
</p>
1.4:反转义
比如:我在萌芽习惯 新建了一个习惯 今日学习&明日事项,微信服务通知我的时候就变成了:今日学习&
处理
浏览器是会把&转成&,但是对方接口不对转义字符解析时,自己就得单独处理。比如:给微信服务通知推送把&通过函数转成&:今日学习&明日事项;而不是今日学习&明日事项
2:转义应用
输入
- 输入数据需要执行sql写操作时,用mysqli_real_escape_string 对 ' " \ 转义。(<>&不在这一层转义,富文本直接存储。框架都会在数据库底层对写操作进行类似封装)
- 输入富文本对标签白名单(<script> <iframe> ...就不出现在白名单)直接存储,否则对<> 一律htmlspecialchars转义;
- 页面需要展示代码时(程序员贴代码用),对<>&在录入代码块时就做(htmlspecialchars($string,ENT_QUOTES ))转义
输出
对方接口(非浏览器),不对字符转义时,在代码层面反转义好传过去。
原文链接:转义