目录
🌲1.Web应用程序的发展历程
在因特网发展的早期阶段,万维网仅由Web站点构成,这些站点基本是静态文档的信息库。随后人们发明了Web浏览器,通过它来检索和显示那些文档。如今万维网与早期的万维网已经完全不同了,Web上的大多数站点实际上是应用程序。Web应用带来了新的重大的威胁,Web应用通常需要与内部计算机系统建立连接,这些系统中保存着高度敏感的数据,并能执行强大的功能。
🍂1.1 Web应用程序的常见功能
- shoping
- 社交:像大家喜欢用的QQ、微信、微博、钉钉、探探、陌陌、soul等等🤭
- 银行服务
- 浏览器搜索
- 拍卖
- 博彩与投机
- 博客
- 邮件
- 交互信息
还有很多,这里就不一一列举了。🍂1.2 Web应用程序的优点
- HTTP协议是用于访问万维网的核心通信协议,它是轻量级的,无需连接
- 每个Web用户都可以在计算机和其它移动设备上安装浏览器,Web界面动态部署用户界面
- 浏览器功能强大,内容丰富,特别是这个互联网快速发展的时代
- Web应用程序的核心技术相对简单,容易上手。
🌲2.Web安全
任何应用程序都存在漏洞,世界上没有绝对安全的系统!
🍂2.1Web应用程序常见漏洞
你也为使用SSL技术就安全了吗?那你太天真了,我们先来看看web应用程序存在哪些漏洞:
- 不完善的身份验证措施: 由于登录机制存在缺陷,攻击者可能爆破出账号密码
- 不完善的访问控制措施: 应用程序无法为数据和功能提供全面保护,攻击者可以查看用户保存在服务器中的敏感信息,对数据进行操作等
- SQL注入: 由于未对用户输入的数据做校验,攻击者能够从数据库中提取任何数据,破话其逻辑结构,执行命令等
- 跨站脚本攻击(XSS): 攻击者可以利用该漏洞攻击应用程序的其他用户、访问其信息,执行未授权操作等。XSS分为三类:反射型XSS、存储型XSS、DOM型XSS。
- 信息泄漏 包括应用程序泄露敏感信息,攻击者利用这些敏感信息通过有缺陷的错误攻击其它程序。
- 跨站请求伪造(CSRF): 攻击者可以诱使用户在无意中使用自己的用户权限对应用程序执行操作,恶意Web站点可以利用该漏洞,通过受害用户与应用程序进行交互,执行用户并不打算执行的操作。
SSL可为用户浏览器和Web服务器间的传输提供机密性和完整性保护功能。它有助于防止信息泄露,并可保护用户处理的Web服务器的安全性。但SSL并不能抵御直接针对某个应用程序的服务器或客户端组件的攻击,而许多成功的攻击都恰恰属于这种类型。需要特别指出的是,SSL并不能阻止上述任何漏洞或许多其它使应用程序收到威胁的漏洞。无论是否使用SSL,大多数Web应用程序任然存在安全漏洞。
当然不止这些。还有**ssrf、xxe外部实体注入、逻辑漏洞、文件上传、文件包含、远程代码执行漏洞、短信轰炸漏洞,框架漏洞等等。**🍂2.2未对用户输入做过滤
Web应用程序必须解决一个根本的问题,应用程序必须假设所有输入的信息都是恶意的输入,并必须采取措施确保攻击者无法使用专门设计的输入破话应用程序,干扰其逻辑结构与行为,并最终 达到非法访问其数据和功能的目的。这个问题的核心表现在以下几个方面:
- 用户可干预客户端与服务端之间传递的所有数据,包括请求参数、cookie和HTTP信息头
- 用户可按任何顺序发送请求,并可在应用程序要求之外的不同阶段不止一次提交或根本不提交参数。用户的操作可能与开发人员对用户和应用程序交互方式做出的任何假设完全不同。
- 用户并不限于仅使用一种Web浏览器访问应用程序。大量各种各样的工具可以协助攻击Web应用程序。
举例:- 更改隐藏的HTML表单字段提交的产品价格,以更低廉的价格欺诈性购买商品。
- 修改在HTTP cookie中传送的会话令牌,劫持另一个验证用户的会话。
- 利用应用程序处理过程中的逻辑错误删除某些正常提交的参数。
- 改变由后端数据库处理的,某个输入,从而注入一个恶意数据库查询以访问敏感数据,也就是sql注入漏洞。
毋庸置疑,SSL无法阻止攻击者向服务器提交专门设计的输入。应用程序使用SSL仅仅表示网络上其他用户无法查看或修改攻击者传送的数据。因为攻击者控制着SSL通道的终端,能够通过这条通道向服务器传送任何内容。如果前面提到的任何攻击实现,那么不论其在FAQ中声称其安全如何,应用程序都很容易收到攻击。🍂2.3 造成这些漏洞的原因是什么呢?
Web应用程序存在如此多安全问题的因素主要有以下几个方面:
- 安全意识不够成熟: 近年来,人们对Web应用程序安全问题的意识有所增强,特别是浙江这块,时不时就来一场互网行动,但与网络和操作系统这些更加完善的领域相比,人们对Web应用程序安全问题的意识还不够成熟。
- 独立开发: 大多数Web应用程序都是由企业自己的员工或合作公司独立开发。即使应用程序使用第三方组件,通常也是使用新代码将第三方组件进行自定义或拼凑在一起。这种情况下,每个应用程序都不同,并且可能包含其独有的缺陷。
- 程序员偷懒: 一个新手程序员可能短期内从头开始创建一个强大的应用程序。但是,在编写功能性代码与安全性代码之间存在巨大差异。他们可能缺乏发现安全问题的知识和经验。特别是很多框架拿来就用,一旦发现漏洞,则会影响很多无关的应用程序。
- 迅速发展的威胁形势: Web应用程序攻击与防御研究发展相对不成熟,是一个正蓬勃发展的领域,人才缺口比较大,新概念与威胁出现的速度比传统的技术要快得多,应用程序部署后会面临许多未知的威胁。
- 资源与时间限制: 由于独立、一次性开发的影响,许多Web应用程序开发会受到严格的时间与资源限制。小型组织通常不愿意多花时日评估一个新的应用程序。快速渗透通常只能发现明显的安全问题,而往往会遗漏比较细微、需要时间和耐心来发现的漏洞。
- 技术瓶颈: 开发人员沿用原有的技术来满足新的需求,这种做法造成的安全漏洞与无法预料的负面影响也就不足为奇了。
- 对功能的需求不断增强: 但我们都知道,功能越多,与数据库的交互就越多,可能存在的漏洞越多,如果安全防护没有做到位,则很容易被攻击。
🍂2.4 安全边界的改变
在Web应用程序出现之前,主要在网络边界上抵御外部攻击。保护这个边界需要对其提供的服务进行强化、打补丁,并在用户访问之前设置防火墙。
Web应用程序的出现改变了这一切,用户要访问应用程序,边界防火墙必须允许其通过 HTTP/HTTPS连接内部服务器;应用程序要实现其功能,必须允许其连接服务器以支持后端系统,如数据库、大型主机以及金融与后勤系统。这些系统通常处于组织运营的核心部分,并由几层网络级防御保护。
人们普遍采用电子邮件作为一种补充验证机制,安全边界一定程度上向客户端转移。当前,大量应用程序都包含“忘记密码”功能,攻击者可以利用该功能向任何注册地址发送账户恢复电子邮件,而无需任何其他用户特定的信息。因此,如果攻击者攻破了用户的Web邮件账户,就可以轻松扩大攻击范围,并攻破受害用户注册的大多数Web应用程序账户。🍂2.5 最后谈谈Web安全的未来
经过历史长河的洗礼,目前因特网上的Web应用程序任然充满漏洞。在了解Web应用程序面临的安全威胁以及如何有效应对这些威胁之前,整个行业仍未形成成熟的认知。目前几乎没有迹象表明上述问题能够在不远的将来得到解决。
Web应用程序安全的另一个突出趋势为:攻击目标已由传统的服务器端应用程序转向用户端应用程序。后一类攻击仍然需要利用应用程序本身的缺陷,但这类攻击一般要与与其他用户进行某种形式的交互,以达到破坏用户与易受攻击的应用程序之间交易的目的。其他软件安全领域也同样存在这种趋势。
技术领域的各种最新趋势在一定程度上改变了Web应用程序的安全状态。像云计算。这一术语指更多地通过外部服务提供商来实施技术栈的各个部分,包括应用程序软件、应用程序平台、Web服务器软件、数据库和硬件。它也指在托管环境中大量采用虚拟化技术。和技术领域的大多数变革一样,这些趋势也催生了一些新型攻击,并导致现有攻击产生变体。虽然这些趋势受到人们的大肆追捧,但鉴于其导致的各种问题,它们并不像人们最初认为的那样会带来颠覆性的改变。
尽管Web应用程序发生了所有这些改变,一些典型漏洞并未表现出任何减少的迹象。它们继续出现,方式与Web技术发展初期大致相问。这些漏洞包括业务逻辑缺陷、未授权访问控制以及其他设计问题。即便在应用程序组什系出果从风一切皆服务”的时代,这些问题仍然会广泛存在。
🌲3.总结
总而言之,多数应用程序都面临一个 核心安全问题,即用户可提交任意输人。用户与应用程序交互的每一个方面都可能是恶意的,而且在未能证明其并无恶意之前应该被认定为是恶意的。如果这个问题处理不当,应用程序就有可能受到各种形式的攻击。当前Web应用程序安全状况的所有证据表明,这个问题尚未得到很好的解决,而且不管是对部署Web应用程序的组织还是对访问它们的用户而言,针对Web应用程序的攻击都是一个严重的威胁。
注:本文部分内容来自《黑客攻防技术宝典》
曾经刻骨铭心的往事早已风轻云淡,就像黄昏的钟声嘎然而止,来不及叹息,也无须叹息。
———— 花城的包包

我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?