数据安全性应该注意的三点
数据安全性
在处理 Web 应用程序时,数据安全性的重要性是怎么强调也不过分的。在看似安全但充满风险的商业环境中,必须时刻防范黑客、解密高手、脚本小子、个人身份信息盗窃者、垃圾邮件发送者、网络钓鱼者、犯罪者和单纯的捣乱者。尽管多年以来情况一直都是如此,但数据安全性的重要性依然往往被低估。就算编写出人类历史上最美妙、最优雅的 Web 应用程序也没有多大意义。糟糕的数据安全性将会使应用程序崩溃。要了解如何处理不良数据,应当熟悉一些需要面对的基本问题。
保护数据意味着什么
虽然糟糕的数据安全性会导致很多问题,但是所有问题可以归结为一句话:知道您要应付什么。数据安全性并不意味着要去掉所有 HTML — 尽管您可能希望这样。也不意味着去掉所有特殊字符 — 尽管您可能希望这样。基本原则是应用程序应该知道要应付什么风险。
这不是了解您的愿望。也不是了解应用程序正在请求哪些内容。毫无疑问,这也不是接受一切。
SQL 注入
如果用户能够将 SQL 代码直接传递给应用程序,此代码将在一个查询中执行,那么就可能发生 SQL 注入攻击。例如,用户看到了登录屏幕,在该屏幕中输入用户名和密码。password 变量可能会在以下查询中使用。
"select * from users where username = '" + $username + "' and password = '" + $password + "'"
考虑一下,如果用户提交以下密码会发生什么情况:’ or ’1′ = ’1。最终的 SQL 语句可能类似以下内容:
"select * from users where username = 'wrestler' and password = 'secret' or '1' = '1'"
不检查 SQL 特有的字符可能会给应用程序带来各种隐患。CakePHP 可以帮助您轻松地解决这个问题。
跨站点脚本
跨站点脚本(Cross-site scripting,XSS)代表了一大类攻击,这些攻击的主要目的是把恶意代码显示给没有疑心的用户。通常采用的形式是恶意 JavaScript,从骚扰用户到从 cookie 中捕获数据,它都能做到。
XSS 攻击的核心是提交用户数据后未恰当过滤的应用程序。例如,假定要构建一个包含论坛的应用程序,但是没有对用户数据执行过滤。通过在论坛中发帖提交的任何内容都可以显示。那么假定我是一个恶意用户,通过在论坛中发帖提交了以下文本:
<script>alert("EXPLETIVES!!!")</script>
如果应用程序允许显示此文本,那么查看我帖子的所有人都会收到一个 JavaScript 警告框,向这些人骂脏话。虽然伤害不太大,但您肯定不希望自己的老板看到这种东西。
这是一个无害的 XSS 攻击的简单示例。虽然本例是完全无害的,但 XSS 很可能造成损害。XSS 曾被用于窃取密码、窃取信用卡卡号、伪造新闻等等。保护您自己和您的应用程序免受 XSS 攻击是非常重要的。CakePHP 可以帮助您保护应用程序。
跨站点请求伪造
跨站点请求伪造(Cross-Site Request Forgery,CRSF)可能不像 XSS 一样常见和广为人知,但这并不意味着它不危险。出于演示的目的,我们假定应用程序包含一个论坛,该论坛向主题创建者授予删除主题的权限。在论坛中,已将删除功能实现为仅显示给创建者的按钮,甚至还检验创建者是不是发出请求的人,然后再执行实际的删除操作。通过发布一个名为 action、值为 delete 的字段和一个包含主题的惟一 ID 的 id 字段完成删除操作。查询字符串可能类似于
http://localhost/forum.php?action=delete&id=1729。
现在,假定我们发布一张图片,或者具有将图片指定为签名的能力,并提供指向图片的 URL 作为查询字符串。在 HTML 中,代码大致如下:
<img src="http://localhost/forum.php?action=delete&id=1729" />
我自己不能直接访问该 URL,因为我不是创建者,应用程序知道这一点。但是,如果主题显示我发布的内容,浏览器就会尝试装入图片,这会请求
http://localhost/forum.php?action=delete&id=1729
— 因为这是创建者发出的请求,所以主题被删除。
摘自IBM :
http://www.ibm.com/developerworks/cn/opensource/os-php-cake3/index.html


