最近在学习web安全相关的一些知识,目前对web安全也只有了一些浅显的理解,下面记录我的一些理解。
常见的攻击方式如下:
- xss攻击
- csrf攻击
- sql注入
xss攻击和防范
反射型XSS攻击
- 说明
此种攻击通俗点讲,就是在用户输入的地方,输入一些恶意的脚本,如搜索框等,输入
<script>alert('handsome boy')</script>
这些脚本在输入之后,一般会立即在当前页面执行,从而达到某种目的
- 防范
直接输出用户输入的结果的时候,可以使用escape的方法对用户输入的内容进行转换
存储型XSS攻击
- 说明
和反射型类似,也是在用户输入的地方,一般是富文本,输入一些脚本,如:
<script>alert('handsome boy')</script>
这些富文本一般是要显示在页面上的
这些脚本一般不会立即执行,而是用户保存之后,存储在服务器上,当别的用户访问的时候,如果不进行一些处理,就会直接执行,达到某种目的,如让用户自动关注点赞等。
- 防范
可以在需要直接显示html的地方做一些过滤显示
CSRF攻击
- 说明
csrf也称跨站伪造请求,就是对网站发起一些恶意的伪造的请求
-
防范
- 一般框架会内置一些方法,如在前端的form表单里加上内置的渲染csrf_token的方法,页面在渲染的时候会自动渲染一个hidden的input,表单在提交的时候,带上这个渲染的csrf_token,这样才会被认为是安全的请求:django可以在form表单里加上:
{% csrf_token %}
; eggjs可以在form标签的属性里加上action\="/upload?\_csrf={{ ctx.csrf | safe }}" enctype\="multipart/form-data"
- 将csrf_token设置在cookie中,在提交请求的时候,在header或者body里带上cookie中的token
- 一般框架会内置一些方法,如在前端的form表单里加上内置的渲染csrf_token的方法,页面在渲染的时候会自动渲染一个hidden的input,表单在提交的时候,带上这个渲染的csrf_token,这样才会被认为是安全的请求:django可以在form表单里加上:
SQL注入
- 说明
一般来说,出现这种攻击的原因就是,直接根据用户的输入,来进行sql语句拼接,从而导致出现执行了一些不想执行的sql语句。
-
防范
- 对用户输入的内容进行校验和过滤
- 不要动态拼接SQL语句
- 不要使用管理员权限连接数据库
- 敏感字段要进行MD5加密
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。