主要有以下的三个:
a) XSS(跨站点脚本攻击)(cross-site scripting)

-> 伪造会话(基于XSS实现CSRF) -> 劫持cookie

-> 恶意代码执行

b) CSRF(跨站请求伪造)(cross-site request forgery)

-> 伪造用户身份操作

c) sql注入

其原理主要是:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令的目的

d)界面操作劫持

防范sql注入的措施

1)永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等

2)永远不要使用动态拼装SQL,可以使用参数化的SQL进行数据查询存取

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

4)不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。

浏览器的Cookie策略:

Cookie 是服务器发送到用户浏览器,并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时,被携带在请求头中并发送到服务器

跨站请求伪造(CSRF)的定义

跨站请求伪造(请求是来源于其他网站的—跨站请求,这个请求并不是来自于用户的意愿----伪造的请求),简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的

定义:
是一种劫持受信任用户,向服务器发送非预期请求的攻击方式。

通常情况下,CSRF 攻击是攻击者借助受害者的 Cookie 骗取服务器的信任,可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击服务器,从而在并未授权的情况下执行在权限保护之下的操作

跨站请求伪造(CSRF)和跨站脚本攻击(XSS)的区别

XSS是获取信息,不需要提前知道其他用户页面的代码和数据包。CSRF是代替用户完成指定的动作,需要知道其他用户页面的代码和数据包.

跨站请求伪造(CSRF)的特点

a) 采用cookie来进行用户校验

b) 登录受信任网站A,并在本地生成Cookie

c) 在不登出A的情况下,访问危险网站B

CSRF的类型

1)请求类型区分:get和post型CSRF攻击

2)按照攻击方式分类:HTML CSRF攻击;JSON HiJacking攻击;Flash CSRF攻击等

HTML CSRF攻击:发起的CSRF请求都属于HTML元素,比如

GET型的CSRF:
通过html标签
<link href=''>
<a href=''>
<img src=''>
<script src=''></script>
<audio src=''>
<video src=''>css样式中的:
@import 'url'
background:url('url')通过js动态生成的标签对象或者css独享发起GET请求POST型的CSRF:只能通过form提交

JSON HiJacking攻击:攻击过程是CSRF,但是是对AJAX中的响应JSON数据类型进行劫持:

数据类型有:字典格式,列表格式

// 字典格式
{'id':1,'name':'jiang'
}// 列表格式
['foo','to']

危害:

1)篡改目标网站上的用户数据

2)盗取用户隐私数据

3)传播CSRF蠕虫

4)作为其他攻击向量的辅助攻击手法

几种常见的CSRF防御手段

a) 验证HTTP Referer字段

原理:就是对比HTTP请求发送的网站的referer字段是否和当前网站是否是同一个网站

referer:指示一个请求是从哪里连接过来的

(非常简单,但是鉴于客户端并不可信任,所以并不是很安全)(防止CSRF,检查Referer字段简单直接,但是其完全依赖浏览器发送正确的Referer字段。虽然http协议对此字段的内容有明确的规定,但并无法保证来访的浏览器的具体实现,亦无法保证浏览器没有安全漏洞影响到此字段。并且也存在攻击者攻击某些浏览器,篡改其Referer字段的可能。)

b) 在请求地址中添加token并验证(譬如post中,以参数的形式加入一个随机产生的token)

token的作用:具有不重复性 + 含有特定的功能信息,比如过期时间戳

组成:a).msg b). separator c).signature

msg部分:随机字符的主体 + 过期时间戳

分隔符号:用符号分隔msg部分,和加密后生成的signature签名部分

签名signature:用密钥对msg进行加密之后的内容

token的格式:例如–token = base64(msg)…base64(sha256(“秘锁”, msg))

token的加密:

首先:用加密方法对msg数据进行加密----sha256散列算法,得到签名signature;

然后:对msg signature进行BASE64的格式转换。

需要在token串中隐含过期时间的设定。每条与服务器交互的token是有过期时间的,超过这个时间范围,就无效了,需要重新从服务器中重新拉取

token验证:当客户端将token,提交到服务器的时候,服务器需要判断token的有效性

首先:token解包—分为msg部分+分隔符+signature签名部分

然后:对比签名

首先,对msg部分进行base64解码, decode_base64(msg);

然后,在对解码后的msg明文,使用相同秘锁进行同样的encode_base64(sha256(msg))加密,

接着,判断加密后的数据和客户端传过来的token中的signature的部分是否一致。如果一致,说明这个token是有效的
最后: 判断过期时间。如果是有效的,取出msg.timestamp,和当前系统时间进行比较,如果过期时间小于当前时间,那这个token是过期的,需要重新取得token

XSS(跨站脚本,cross-site scripting)

攻击者往Web页面里插入恶意的html标签(在img加载失败的时候。触发onerror事件,在该事件里面写入恶意的js代码)或者javascript代码。比如:攻击者在论坛中放一个看似安全的链接,骗取用户点击后,窃取cookie中的用户私密信息;或者攻击者在论坛中加一个恶意表单,当用户提交表单的时候,却把信息传送到攻击者的服务器中,而不是用户原本以为的信任站点。

定义:

XSS指的是跨站脚本-----重点是脚本而非跨站,发生在目标网站的目标用户(场景)的浏览器层面上,当目标用户的浏览器渲染整个HTML文档的过程中出现了不被预期的脚本指令并执行时,XSS就会发生。

通俗的讲,就是想尽一切办法将脚本内容在目标网站中的目标用户的浏览器中解析执行

XSS的类型

反射型XSS(非持久性XSS);存储型XSS(持久性);DOM XSS

反射型XSS(非持久性XSS):客户端发出请求时,XSS代码出现在URL中,作为输入提交到服务端,服务端解析后响应,在响应内容中出现这段XSS代码,最后浏览器解析执行

如点击恶意链接、提交表单、进入一个恶意网站时,注入脚本进入被攻击者的网站

// http://www.foo.com/reflect.php内容如下; 输入的值未经过滤,
// 直接输出到响应体中,然后浏览器解析执行
<?echo $_GET['x'];
?>// 提交的url为 http://www.foo.com/reflect.php?x=<script>alert(1)</script>

存储型(非持久)xss:与反射型XSS的差别仅在于-----提交的xss代码会存储在服务端(数据库、内存、文件系统等),下次请求目标页面时,不用再提交XSS代码

留言板XSS----用户提交一条包含XSS代码的留言,存储到数据库,目标用户查看留言板时,留言内容从数据库查询出来并显示,浏览器发现有XSS代码,也当做正常的HTML与JS解析执行,就触发XSS攻击

DOM XSS:与反射型、存储型XSS的差别在于----DOM XSS的XSS代码不需要服务器解析响应的直接参与,仅靠浏览器端的DOM解析就可以完成

<script>eval(location.hash.substring(1));
</script>触发XSS方式:http://www.foo.com/xssme.html#alert(1)常见的输入点有:
document.url
document.location
document.referer

危害:

1)挂马

2)盗取用户Cookie

3)DoS(拒绝服务)客户端浏览器

4)钓鱼攻击,高级钓鱼技巧

5)编写针对性的XSS病毒,删除目标文章、恶意篡改数据、嫁祸

6)劫持用户Web行为,进一步渗透内网

7)爆发WEB2.0蠕虫

防御XSS的方法

a) 输入校验----长度限制、值类型是否正确、是否包含特殊字符(< >,过滤和编码)

校验是对数据无害的,满足就放行,不满足就阻止,一般不建议任何过滤,能保证数据的原生态

b) 输出编码--------根据输出的位置进行相应的编码,如HTML编码、JS编码、URL编码,原则-----该数据不要超出 自己所在的区域,也不要被当做指令执行

HTML编码:

作为body文本输出

< 转成 &lt;> 转成 &gt;& 转成 &amp;" 转成 &quot;' 转成 &#39

其他的转义

\ 转成 \\/ 转成 \/; 转成 ;(全角;)js编码:encodeURIComponent()    encodeURI()       escape()

c) cookie设置Http-Only,这样用脚本就无法获取cookie了(这样只有浏览器向Web服务器发起请求的时才会带上cookie字段,避免了XSS攻击利用JavaScript的document.cookie获取cookie);对cookie中敏感信息加密;设置secure=true;给cookie设置有效期;指定cookie domain的子域名

d) Cookie防盗,尽可能地避免在Cookie中泄露隐私,如用户名、密码等;或者,为了防止重放攻击,可以将Cookie和IP进行绑定,这样也可以阻止攻击者冒充正常用户的身份。

e) 注意,特别是后台,一定不能信任前端的输入,需要过滤与校验

f) 尽量采用POST而非GET提交表单

ajax请求存在不安全的问题有哪些?如何解决这些不安全的很问题相关推荐

  1. 前台ajax请求php后台返回成功却进error方法解决

    前台ajax请求php后台返回成功却进error方法解决 参考文章: (1)前台ajax请求php后台返回成功却进error方法解决 (2)https://www.cnblogs.com/anniey ...

  2. ajax请求 拦截窗口,ajax请求成功后新开窗口window.open()被拦截解决方法

    ajax请求成功后新开窗口window.open()被拦截解决方法 问题: 前面开发项目时碰到一个问题,ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但 ...

  3. tp框架里怎么写ajax,TP中的ajax请求

    以jQuery中的ajax为例: (1)引入jQuery 通过模板替换表示路径,我们可以自定义模板替换变量(在config中定义) /*自定义模板替换标签*/ 'TMPL_PARSE_STRING' ...

  4. ajax发送动态字符传,如何发送ajax请求文件与其他字符串的变量?

    我想创建ajax调用并发送数据与文件和其他变量,我也使用django,如果它的帮助.如何发送ajax请求文件与其他字符串的变量? 我尝试: js文件: $("#save-new-reques ...

  5. 为什么ajax请求状态码为0,ajax请求状态码为0的解决办法

    原文链接:https://blog.csdn.net/changqing5818/article/details/53932463 前言 今天遇到个奇怪的问题,使用JQuery的ajax请求,后台的C ...

  6. 关于JQuery中的ajax请求或者post请求的回调方法中的操作执行或者变量修改没反映的问题...

    前段时间做一个项目,而项目中所有的请求都要用jquery 中的ajax请求或者post请求,但是开始处理一些简单操作还好,但是自己写了一些验证就出现问题了,比如表单提交的时候,要验证帐号的唯一性,所以 ...

  7. 使用rest_framework写api接口的一些注意事项(axios发送ajax请求)

    1. 类继承GenericAPIView,定义queryset 印象深刻的事: 由于原来对于继承关系不太清楚,写接口 APIView/泛指GenericAPIView不太关注queryset 没有设置 ...

  8. jQuery发送含有数组参数的ajax请求以及后台Struts2的OGNL解析错误

    当使用jquery1.3以上版本时,进行ajax参数传值时,会出现以下的一个错误: ognl.ExpressionSyntaxException: Malformed OGNL expression: ...

  9. ajax请求必须打断点才能成功,Jquery等待ajax执行完毕继续执行(断点调试正常,运行异常)...

    以前写过一个程序,发现用断点调试的时候,一步步的运行,程序是可以的,但是去了断点程序就出现了问题. $(document).ready(function(){ var arra=new Array() ...

  10. python的flask框架显示柱状图_使用Python的Flask框架,结合Highchart,动态渲染图表(Ajax 请求数据接口)...

    参考链接:https://www.highcharts.com.cn/docs/ajax 参考链接中的示例代码是使用php写的,这里改用python写. 需要注意的地方: 1.接口返回的数据格式,这个 ...

最新文章

  1. 《Mysql数据库及应用》_MySQL数据库及应用
  2. DeepFake噩梦来了!武大阿里团队提出FakeTagger,重新识别率达95%
  3. IE工具条不能自动显示
  4. 服务器网站数据用什么方式加以保留?
  5. 您对光纤损耗了解多少?知道如何计算吗?
  6. Java实现二分查找及其优化
  7. CSS美化滚动条的方法
  8. 通过spark-submit,本地测试SparkStreaming
  9. CMMI3组织级文档列表清单
  10. 新手开车 驾驶小秘诀要牢记
  11. 一个Excel导出类的实现过程(一):泛型与反射
  12. 使用libvirt技术监控虚拟机资源利用情况
  13. HTML5期末大作业:我的家乡网站设计4
  14. 视觉错觉的举例------------善于发现生活中的
  15. 谷歌大数据的三驾马车
  16. 帝国自动生成html,帝国CMS7.2同步生成移动端HTML
  17. css替换csgo弹道,csgo怎么能让弹道更明显一些?
  18. 让别人不能关掉python程序_让的解释|让的意思|汉典“让”字的基本解释
  19. PHP——你应该知道的面试题
  20. php中smarty模板的优点,php的smarty模板引擎有哪些特点

热门文章

  1. 牛腩新闻系统--.NET使用一般处理程序生成验证码
  2. Error response from daemon conflict unable to delete 3f37e5daf5bd (cannot be forced) - image is bein
  3. Java job interview:Java对象持久化的新的规范JDO
  4. Contiki开发日记·1——Instant-contiki环境搭建
  5. js:网页中的高和宽(document)
  6. 整合rocketmq/stream-rocketmq启动报错channel.AbstractMessageChannel问题
  7. OpenCV图像滤镜操作-模糊
  8. 云队友丨新品牌的营销大战:砸进上百万,苦心博出圈
  9. tcl电视linux软件升级,【高清范】TCL电视升级刷机常见问题大汇总!
  10. 小程序直接跳转公众号的必要条件记录