Previous topic

为什么选择WEB2PY

Next topic

框架内容

This Page

安全性

开放Web软件安全项目(Open Web Application Security Project)是一个免费的对全世界开放的,致力于增强软件安全项目。

OWASP已经列出Web应用安全方面的十大问题。该列表在此被引用,并解释了WEB2PY是如何解决这些安全问题的:

·跨站点脚本攻击(Cross Site Scripting):用户提交的数据在被验证和编码之前被发送到浏览器时,该问题有可能出现。跨站点脚本攻击漏洞,使得黑客能够通过在受害者浏览器中执行代码,从而劫持该用户的会话,进而在被劫持用户电脑上安装恶意软件。

在默认情况下WEB2PY将会在视图渲染之前,转意所有输出内容,从而消除跨站点脚本攻击漏洞。

·注入攻击(Injection Flaws):注入攻击,特别是SQL语句注入攻击漏洞,在Web应用中非常普遍。该问题发生于,用户提交的数据被发送到命令或查询解释器的时候。攻击者通过提交恶意的攻击代码,导致解释器执行异常的命令或更改不应改变的数据。

WEB2PY通过采用数据库抽象层,使得SQL注入不可能成功。通常情况下,SQL语句并不是由开发人员编写的,而是由数据库抽象层动态生成的,从而保证了所有的插入数据中所含的特殊字符都被转意替换过了。

·“执行恶意文件”(Malicious File Execution):代码漏洞,和远程文件包含,使得攻击者可以包含恶意代码和数据,结果是极具破坏性的,例如攻陷整个服务器。

WEB2PY对外只暴露能被运行的方法,从而防止恶意代码的执行。包含的方法本身是不被暴露的,暴露的只有行为。WEB2PY基于WEB的管理界面使得查看暴露的行为非常方便。

·“危险直接对象引用”(Insecure Direct Object Reference):该问题是由于开发者把内部引用对象,例如文件、目录、数据库记录、或密钥,作为URL地址或表单的参数。攻击者通过利用这一漏洞,在未经授权的情况下访问内部对象。

WEB2PY没有暴露任何的内部对象,另外WEB2PY还会验证所有的URL地址,从而防止了目录遍历攻击。WEB2PY还提供了使用简单的,自动创建表单、验证用户输入的功能。

·“跨站点请求伪造”(Cross Site Request Forgery):该攻击是指,强迫一个已经登录的用户,向受害站点发送一个已经验证登录的恶意请求,黑客通过利用受害着攻击了该站点。

WEB2PY将所有会话信息都保存在服务器端,在用户浏览器的cookie中只存贮会话ID。并且WEB2PY还通过在表单中加入一次性随机票据,防止用户二次提交同一表单。

·“信息泄露和错误处理不当”(Information Leakage and Improper Error Handling):程序有可能在某些特殊情况下泄露不该暴露的配置、内部以及隐私信息。黑客可以通过该漏洞获得敏感的数据从而发起攻击。

WEB2PY中包含了错误处理票据系统。所有的错误内部信息都不会暴露给一般用户。所有的错误信息都被系统日志记录,框架会发送一个错误票据号码给用户,用来追踪该错误。只有系统管理员能够访问错误日志和出错源代码。

·“验证和会话管理中断”(Broken Authentication and Session Management):用户帐户信息,会话凭据常常没有被加以保护。黑客通过获得用户密码,密钥或者会话凭据从而冒充成合法的用户。

WEB2PY提供了内建的系统管理员验证登录系统,并且在每个应用中单独存放和管理会话信息。并且在远程登录时,管理界面强制用户使用安全的会话cookie。对于应用程序来说,框架提供了功能强大的用户角色访问控制接口。

·“危险密钥存储”(Insecure Cryptographic Storage):在Web应用中,数据和用户身份很少被合理的加密处理。攻击者通过利用数据加密的不足,盗用合法用户身份,进行其他攻击,例如信用卡欺诈。

WEB2PY通过采用MD5或HMAC+SHA-512哈希算法来保护用户密码。当然用户也可以采用其他加密算法。

·“不安全通迅”(Insecure Communications):很多应用程序未对敏感数据的传输进行加密处理。

WEB2PY包含支持SSL的CherryPY WSGI server,而且还可以使用Apache或Lighttpd以及mod─ssl从而进行SSL加密通迅。

·“未能限制URL访问”(Failure to Restrict URL Access):很多应用仅仅通过不显示敏感的URL地址来阻止用户访问。黑客则可以利用这一漏洞,未经登录直接输入URL地址访问敏感地址。

WEB2PY将URL请求映射到Python模块和方法。WEB2PY包含了一套验证机制,可以定义那些方法是公有的,那些是需要登录受限访问的。并且包含了基于角色的访问控制接口,允许开发者基于登录或组群全线来限制用户的访问。例如,通过结合CRUD,权限的设置甚至能够细化到哪些用户能够访问哪些表和或记录。