常见web安全及防护原理
sql 注入原理
-
就是通过把 SQL 命令插⼊到 Web 表单递交或输⼊域名或⻚⾯请求的查询字符串, 最终
达到欺骗服务器执行恶意的SQL命令
-
总的来说有以下⼏点:
-
永远不要信任用户的输⼊ ,要对用户的输⼊进行校验, 可以通过正则表达式, 或限制⻓
度,对单引号和双 "-" 进行转换等
-
永远不要使用动态拼装SQL, 可以使用参数化的 SQL 或者直接使用存储过程进行数据查
询存取
-
永远不要使用管理员权限的数据库连接, 为每个应用使用单独的权限有限的数据库连接
-
不要把机密信息明⽂存放,请加密或者 hash 掉密码和敏感的信息
-
XSS
什么是XSS攻击:
跨网站指令码 ( 英语: Cross-site scripting , 通常简称为: XSS ) 是⼀
种网站应用程式的安全漏洞攻击, 是代码注⼊的⼀种 。它允许恶意使用者将程
式码注⼊到网页上, 其他使用者在观看网页时就会受到影响 。这类攻击通常包
含了 HTML 以及使用者端脚本语言
XSS攻击分为三种:
反射型
如果word值为 <script>alert(1)</script>时,response 也是<script>alert(1)</script>,此时script标签内的代码就会被执行
存储型:
存储型则是把用户的输入存储起来,没有对用户的输入做处理。
DOM-based:
反射型和存储型都必须经过服务端,但基于DOM的XSS则是不用,而是直接在浏览器端攻击。
如何防御
最普遍的做法是转义输⼊输出的内容,对于引号,尖括号,斜杠进行转义
function escape( str) {
str = str.replace(/&/g, "&");
str = str.replace(/</g, "<");
str = str.replace(/>/g, ">");
str = str.replace(/"/g, "&quto;");
str = str.replace(/'/g, "&##39;");
str = str.replace(/`/g, "&##96;");
str = str.replace(///g, "&##x2F;");
return str
}
escape( '<script>alert(1)</script>')
通过转义可以将攻击代码 <script>alert(1)</script> 变成 // -> <script>alert(1)& lt;&## x2F;script>
csrf
跨站请求伪造 ( 英语: Cross-site request forgery ), 也被称为 one- click attack 或者 session riding , 通常缩写为 CSRF或者 XSRF
栗子:
假设网站中有⼀个通过 Get 请求提交用户评论的接⼝ ,那么攻击者就可以在钓
鱼网站中加⼊⼀个图片, 图片的地址就是评论接⼝.
如何防御
Get 请求不对数据进⾏修改
不让第三⽅网站访问到用户 Cookie
阻止第三⽅网站请求接⼝
请求时附带验证信息, 比如验证码或者 token