常见web安全及防护原理

104 阅读2分钟

常见web安全及防护原理

sql 注入原理

  • 就是通过把 SQL 命令插⼊到 Web 表单递交或输⼊域名或⻚⾯请求的查询字符串, 最终

    达到欺骗服务器执行恶意的SQL命令

  • 总的来说有以下⼏点:

    • 永远不要信任用户的输⼊ ,要对用户的输⼊进行校验, 可以通过正则表达式, 或限制⻓

      度,对单引号和双 "-" 进行转换等

    • 永远不要使用动态拼装SQL, 可以使用参数化的 SQL 或者直接使用存储过程进行数据查

      询存取

    • 永远不要使用管理员权限的数据库连接, 为每个应用使用单独的权限有限的数据库连接

    • 不要把机密信息明⽂存放,请加密或者 hash 掉密码和敏感的信息

XSS

什么是XSS攻击:

跨网站指令码 ( 英语: Cross-site scripting , 通常简称为: XSS ) 是⼀

种网站应用程式的安全漏洞攻击, 是代码注⼊的⼀种 。它允许恶意使用者将程

式码注⼊到网页上, 其他使用者在观看网页时就会受到影响 。这类攻击通常包

含了 HTML 以及使用者端脚本语言

XSS攻击分为三种:

反射型

image-20231019225711094
如果word值为 <script>alert(1)</script>时,response 也是<script>alert(1)</script>,此时script标签内的代码就会被执行

存储型:

存储型则是把用户的输入存储起来,没有对用户的输入做处理。

DOM-based:

反射型和存储型都必须经过服务端,但基于DOM的XSS则是不用,而是直接在浏览器端攻击。

如何防御

最普遍的做法是转义输⼊输出的内容,对于引号,尖括号,斜杠进行转义

function escape( str) { 
    str = str.replace(/&/g, "&amp;"); 
    str = str.replace(/</g, "&lt;"); 
    str = str.replace(/>/g, "&gt;"); 
    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> 变成 // -> &lt;script&gt;alert(1)& lt;&## x2F;script&gt;
​

csrf

跨站请求伪造 ( 英语: Cross-site request forgery ), 也被称为 one- click attack 或者 session riding , 通常缩写为 CSRF或者 XSRF

栗子:

假设网站中有⼀个通过 Get 请求提交用户评论的接⼝ ,那么攻击者就可以在钓

鱼网站中加⼊⼀个图片, 图片的地址就是评论接⼝.

如何防御

Get 请求不对数据进⾏修改

不让第三⽅网站访问到用户 Cookie

阻止第三⽅网站请求接⼝

请求时附带验证信息, 比如验证码或者 token