zoukankan      html  css  js  c++  java
  • 安全总结

    xss:请简述xss的原理:

    xss的全称(英文自己搜索)为跨站脚本攻击,原理就是:用户的数据(一篇文章或者一个评论或者浏览器访问时的一个参数等)最后被当成脚本在页面中执行(执行的地方有可能是在script标签内,也有可能是其他标签的属性或者是一些富文本中等等)了。
    最根本的就是本来是一个数据的,被当成了一个脚本,变成了一个程序

     xss:请简述XSS的防御方法

    防御有两种思路:
    一:不要让数据变成程序
    二:数据变成程序后,也让它没有办法执行
    防御方法:
    一:浏览器内置了对反射型XSS的防御,当检测到有反射型XSS时,会进行一个拦截;
    二:对数据进行适当的转义,转义包括在正文中的转义,包括在属性中的转义和在脚本(Script)中的转义,会转义的字符主要包括:大于号,小于号,单引号,双引号,以及@号;
    三:针对不能将HTML标签全部过滤的或者转义的情况,比如说富文本(因为它的富文本的样式正是靠html标签来产生的),这种情况只能使用白名单进行过滤(白名单的意思就是把我们的这段代码解析成具体的html树,然后对这个html树进行分析,哪些标签是可以保留的,哪些属性是可以保留的,最后再变成一个html字符串);
    四:使用CSP,通过CSP指定哪些内容是可以执行的,哪些内容是不可以执行的,这样的话,当我们预期之外的内容出现的时候,我们可以让它不能执行,这是一种比较有效的防御方式

     XSS:XSS防御需要注意的点

    最根本的就是转义的时候要注意它的使用场景和范围,比如说你是在一个script标签这样的方式来进行攻击的话,那可能要需要转义大于号或者小于号,如果是在HTML属性中,可能需要转义引号,如果在富文本中,只能通过白名单的方式,
    一定要注意使用场景和对应的防御方法

    CSRF:CSRF原理是什么

    原理主要就是浏览器在访问我们服务器的时候会带上cookie,当一个第三方的网站通过比如说图片或者表单提交的方式来访问的时候,这个时候的cookie也是带上的,那么带上的过程中就表示我知道这个用户的身份,那就会利用这个用户的身份做一些操作,在这个过程中,因为是从第三方网站静默的发起的,其实用户根本不知情
    CSRF的原理就是在用户不知情的情况下,对目标网站发起了一个请求,而这个时候是带有用户身份的

     CSRF:CSRF的危害是什么

    一切盗用用户身份后可以做的事情都会危害,比如冒名发帖,模拟用户去做消费,让用户发表一些不好的言论等等
    只要是用户身份可以做的,CSRF都可以做,并且是在用户不知情的情况下

    CSRF:CSRF如何进行防御

    防御几种方式:
    一:不让第三方过来的请求带cookie,就可以防止第三方的请求盗用用户身份,这个主要是通过seingset这个cookie的属性,因为seingset只支持chrome,所以这种方式虽然很有效,但是这种应用范围很有限;
    二:增加用户的感知,比如说需要带一个验证码,这样的方式就是用户在不进行操作的情况下,没有办法静默的去发表一个言论或者什么的,就是请求没有办法进行;
    三:增加touken,这个touken的原理是我们同时写到网站的页面就是表单以及cookies中,这样的话,第三方访问的时候,没有办法读取cookie,那它就没有办法对这个touken进行一个正确的发送,这样,我们就可以判断这个请求是不合法的;
    四:通过判断来源(refer),比如来源来自于一个第三方网站的时候,就认为这是一个不合法的请求,将它进行拦截;

    Cookies:Cookies的作用是什么?

    从技术上将,就是在浏览器段存储一个数据,这个数据的量不会很大,它会比较持续的存在,除非当它的有效时间到了,否则是不会随着浏览器的关闭而消失的,可以持续一段时间;
    应用层面,我们可能会用它去存储一些这样的数据,比如说网站的配置,这个用户的偏好是什么,之前做过一些个性化的选择,还可以存储用户身份的标识,当你登录的时候,就往cookies里放一个标识,用户后续的身份识别,表示你是这个用户,比如说做一些分析统计等等,都可以放到cookies中,只要放到本地存储的需求我们都可以放到cookies中
    cookies跟其它的存储,比如local storage(本地存储)有什么区别?
    区别主要在几个方面:
    一:它们的兼容性是有区别的,local storage是html5新增的,对于低版本IE,它是不支持的
    二:cookies它会自动的在请求时带上,不需要我们手工去发送,而local storage是没有办法手动发送的
    三:cookies,我们可以指定它的过期时间,这样的话,一旦时间到了,它就会失效,而local storage是没有这样的机制的,需要我们自己去做删除这样的动作;
    这是一些主要的区别,当然还有像容量,还有像cookies的一些特征,local storage有一些不支持等等

     Cookies:Cookies和Session的关系

    Session是用来跟一个用户相关的,当你登录或者没有登录的时候,可能有一些数据是在你的每一次请求中我都需要关注的,比如说你是谁,你的登录态等等,都会放到session中
    session与cookie的关系:
    Session 是在服务端实现的,但是Session它需要有一个标识,需要你告诉我你这个人对应的是哪一个Session,那么这个标识我们一般是放到Cookies中的,也就是说,当我准备开启一个Session的时候,就是给一个标识,给到Cookies里面,下一次,当你访问的时候,把这个标识带过来,我就能取到对应的Session,就是说Session是基于Cookie的存储来实现的,当然Session也还有其它的实现方式,也不是很常用,常用的就是基于cookie来实现的

    Cookies:Cookies有哪一些特性?

    1.cookies的属性是它的特性
    2.cookie的容量比较小,一般有一定的限制,
    3.它会跟随HTML去发送
    4.它是通过http头发送和设置等等
    5.它可以通过js读取
    最重要的是要关注它的几个属性:
    属性主要包括域名,因为有域名的话,它就是不能够跨域的,这是cookies的一个特性;
    第二个就是它的路径,也就是path,同一个域名下面,你的path不一样,你的cookies读取的情况也会不一样;
    第三个就是有效期,有效期内cookies都会有效,但过了有效期,cookies就是变得无效了,也就相当于它就不存在了;
    第四个就是他是不是httponly,httoonly的cookie是没有办法通过js去读取的,只能够通过http发送到后台,给后台来进行读取,
    除此之外,还有比如说sperui,只有在https下可以用
    还有之前提过的SMset这样的属性
    这是cookies的一些特性

    Cookies:如何删除一个Cookie值?

    通过设置cookie的过期时间为一个过去的时间,比如说我设置一个cookie,把它的过期时间设置为昨天,那就意味着它昨天就应该过期,现在它就是无效的,它就被删除了

     HTTPS:HTTPS是如何保证数据不被窃听的

    基于http下面加了一个加密层,所以用https,这个s就是加密的意思。
    那HTTPS是如何保证数据不被窃听的呢?
    它是通过数据加密的方式,在客户端和服务端进行通讯之前,会协商一个加密协议,那么通过这个加密协议去传输所有的数据,传输过程中,这些所有的数据都是加密的,那么第三方就没有办法进行窃听,或者更准确的一点说,第三方是可以窃听加密后的数据,但是它没有办法知道加密前的原始数据是什么

     HTTPS:HTTPS是如何保证不被中间人攻击的

    中间人攻击:就是虽然你的客户端和服务端都是加密的,但是我可以有一个角色,放在中间,即充当服务端又充当客户端,可以拦截客户端的通信,然后解密,解密完成后,重新加密,再给到服务端,这样的话,你两边看到的都是加密的数据,但其实中间经过了一个中间人这样一个角色;
    那HTTPS是怎么样防御这个中间人攻击的呢?
    主要通过一个证书机制,那也就是说服务器你的证书是需要由可信的CA(数据证书中心)来签发的,而浏览器会去验证你这个证书是不是由可信的CA来签发的,如果是,那我就认为你确实是合法的服务器,如果不是,那就认为可能你是一个伪造的服务器。
    CA和证书机制就是保证我们的HTTPS不被中间人攻击的关键

    HTTPS:部署HTTPS的步骤

    一般分为如下几步:
    第一步,是需要确保你的全站都可以部署到HTTPS,因为部署一部分HTTPS。它的意义有限,有可能没有加密的部分仍然会被攻击,产生安全风险,所有先确保所有的地方都可以被HTTPS访问,最麻烦的地方是你的资源引用,比如说我页面上有一个图片,它以前是使用HTTP访问的,那么现在你必须保证它能通过https访问,那这样的工程其实是比较庞大的,会涉及到所有资源的改造;
    第二步:做完这步以后,要去找CA生成一个证书,因为只有这样,才能证明你是一个合法的服务器,并且因为这个证书才会被浏览器所信任;
    第三步:申请完证书以后,第三步就是将证书部署到我们的服务器上面,在真实的服务器中通过ngix来部署;
    相对来说,步骤比较简单,但是实施起来,还是比较麻烦的

     SQL注入:SQL注入的原理是什么

    SQL注入的原理与前面说的XSS注入的原理非常像,它就是用户查询,本来这个查询条件它应该是一个数据,但是这个数据变成了查询语句本身的一部分,导致我们的查询语句的语义被改变了,从而产生一些意料之外的查询结果,这个就是SQL注入的原理

     SQL注入:SQL注入有哪些危害

    既然SQL语句能被改变,就意味着我们能够查询出各种各样的数据,也就是说会输出一些我们本来不愿意输出给用户的数据,那么最轻的情况就是导致页面逻辑出现异常,稍微严重的就会导致我们泄露一些数据给到没有权限的用户,那最严重的情况就是可能导致整个数据的泄露,被产生脱库这样的情况,当然这中间,像什么用户密码泄露,用户登录态泄露,那这个就是顺水推舟的一件事情了
  • 相关阅读:
    一个好用的H5tab切换(抽屉功能)
    jQuery的ajax请求
    原生js的ajax请求
    微信小程序封装get、post请求
    微信小程序 data数据的赋值和取值
    gitLab更新文件命令
    vue中localStorage的使用
    linux就该这么学--课程第15天
    linux就该这么学--课程第14天
    linux就该这么学--课程第13天
  • 原文地址:https://www.cnblogs.com/jingzaixin/p/12672679.html
Copyright © 2011-2022 走看看