当前位置: 首页 > news >正文

大型网站技术架构(八)网站的安全架构

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

  从互联网诞生起,安全威胁就一直伴随着网站的发展,各种Web攻击和信息泄露也从未停止。常见的攻击手段有XSS攻击、SQL注入、CSRF、Session劫持等。

1、XSS攻击

 XSS攻击即跨站点脚本攻击(Cross Site Script),指黑客通过篡改网页,注入恶意HTML脚本,在用户访问网页时,控制用户浏览器进行恶意操作的一种攻击方式。

常见的XSS攻击类型有两种,一种是反射型,攻击者诱使用户点击一个嵌入恶意脚本的链接,达到攻击的目的,如下图所示:

 

 

另一种XSS攻击是持久型XSS攻击,黑客提交含有恶意脚本的请求,保存在被攻击的Web站点的数据库中,用户浏览网页时,恶意脚本被包含在正常页面中,达到攻击的目的,如下图所示:

 

消毒

对某些html字符转义,如“>”转义为“&gt”等。

HttpOnly

即浏览器禁止页面javascript访问带有HttpOnly属性的Cookie。可通过对Cookie添加HttpOnly属性,避免被攻击者利用Cookie获取用户信息。

2、注入攻击

注入攻击主要有两种形式,SQL注入攻击和OS注入攻击。SQL注入攻击的原理如下图所示。攻击者在HTTP请求中注入恶意的SQL命令,服务器用请求构造数据库SQL命令时,恶意SQL被一起构造,并在数据库中运行。

 

除了SQL注入,攻击者还根据具体应用,注入OS命令、编程语言代码等达到攻击目的。

 

消毒

和防XSS攻击一样,过滤请求数据中可能注入的SQL,如"drop table"等。另外还可以利用参数绑定来防止SQL注入。

3、CSRF攻击

CSRF即Cross Site Request Forgery 跨站点请求伪造,攻击者通过跨站点请求,以合法用户的身份进行非法操作。CSRF的主要手段是利用跨站请求,在用户不知情的情况下,以用户的身份伪造请求。其核心是利用了浏览器Cookie或服务器Session策略,盗取用户身份

 

表单Toke

       CSRF是一个伪造用户请求的操作,所以需要构造用户请求的所有参数才可以,表单Token通过在请求参数中增加随机数的办法来组织攻击者获取所有请求参数。

验证码

       更加简单高效,即请求提交时,需要用户输入验证码,以避免在用户不知情的情况下被攻击者伪造请求。

Referer Check

       HTTP请求头的Referer域中记录着请求来源,可通过检查请求来源,验证其是否合法,还可以利用这个功能来实现突破防盗链。

4、WEB应用防火墙

        ModSecurity是一个开源的Web应用防火墙,探测攻击并保护Web应用程序,既可以嵌入到Web应用服务器中,也可以作为一个独立的应用程序启动。ModSecurity最早只是Apache的一个模块,现在已经有JAVA、NET多个版本,并支持Nginx。

        ModSecurity采用处理逻辑与攻击规则集合分离的架构模式。处理逻辑(执行引擎)负载请求和相应的拦截过滤,规则加载执行等功能。而攻击规则集合则负责描述对具体攻击的规则定义、模式识别、防御策略等功能。处理逻辑比较稳定,规则集合需要不断针对漏洞进行升级,这是一种可扩展的架构设计。

 

 

5、信息加密技术

为了保护网站的敏感数据,应用需要对某些数据进行加密处理,信息加密技术科分为三类:单向散列加密、对称加密和非对称加密

5.1单向散列加密

单向散列加密是指通过对不同输入长度的信息进行散列计算,得到固定长度的输出,这个散列计算过程是单向的,如下图所示。

 

单向散列加密一般主要用途是用户密码的加密,使密码不可逆的保存到数据库中,即便数据库信息泄露,攻击者也无法知晓原密码是什么。

常见的单向散列算法有MD5、SHA等。

5.2对称加密

即加密和解密都使用同一个密钥,如下图所示:

 

常用的对称加密算法有DES算法、RC算法等。对称加密是一种传统的加密手段,也是最常用的加密手段,适用于大多数场合。

 

5.3非对称加密

非对称加密使用的加密和解密不是同一密钥,其中一个对外界公开,被成为公钥,另一个只有所有者知道,被称作私钥。用公钥加密的信息必须用私钥才能解开,反正,用私钥加密的信息只有用公钥才能解开,如下图所示:

 

非对称加密常用算法有RSA等。HTTPS传输中浏览器使用的数字证书实质上是经过权威机构认证的非对称加密的公钥

转载于:https://my.oschina.net/zhanghaiyang/blog/593761

相关文章:

  • 32位程序在64位系统上获取系统安装时间
  • 怎样 配置这个网络拓扑
  • 关于烂代码的那些事(中)
  • Spring学习总结(4)——Spring AOP教程
  • CentOS 7安装配置Apache HTTP Server
  • 《团队名称》第八次团队作业:Alpha冲刺
  • Velocity常用方法
  • 《Play for Java》学习笔记(三)template+Message
  • [翻译] JTBorderDotAnimation
  • 2019春总结作业
  • bzoj1202
  • 内存泄露
  • HTML5标准学习 - 编码
  • iOS内存管理规则
  • javaBean规范
  • [译]Python中的类属性与实例属性的区别
  • fetch 从初识到应用
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • HTML中设置input等文本框为不可操作
  • node入门
  • Yeoman_Bower_Grunt
  • 三栏布局总结
  • 深入浅出Node.js
  • 网页视频流m3u8/ts视频下载
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​io --- 处理流的核心工具​
  • ​一些不规范的GTID使用场景
  • #define、const、typedef的差别
  • (独孤九剑)--文件系统
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)shell中括号的特殊用法 linux if多条件判断
  • .net6Api后台+uniapp导出Excel
  • .NET连接MongoDB数据库实例教程
  • .net流程开发平台的一些难点(1)
  • .net网站发布-允许更新此预编译站点
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • [20170728]oracle保留字.txt
  • [BIZ] - 1.金融交易系统特点
  • [C++]高精度 bign (重载运算符版本)
  • [Codeforces] combinatorics (R1600) Part.2
  • [EFI]MSI GF63 Thin 9SCXR电脑 Hackintosh 黑苹果efi引导文件
  • [Electron] 将应用打包成供Ubuntu、Debian平台下安装的deb包
  • [IE编程] IE8 新增的C++开发接口
  • [IE编程] IE8的SDK 下载
  • [iHooya]2023年1月30日作业解析
  • [Linux]history 显示命令的运行时间
  • [one_demo_2]使用正则表达式过滤字符串
  • [QJS xmake] 非常简单地在Windows下编译QuickJS!
  • [RoarCTF 2019]Easy Calc
  • [SharePoint][SharePoint Designer 入门经典]Chapter13 客户端Silverlight编程
  • [UOJ430]line
  • [web前端] yarn和npm命令使用
  • [笔记] BAD PASSWORD ,linux 修改密码历程