`
atell
  • 浏览: 161644 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

[Playframework文档中文翻译]安全指导

阅读更多

(原文链接:http://play-framework.herokuapp.com/zh/security " ) 来自"Playframework中文小站 " )

安全指导

本章译者:@nixil

虽然Play在设计之初就考虑了安全性问题,但是任何人都无法阻止程序员们自毁长城。以下的向导将会涉及web应用常见的安全性问题,以及在Play中该如何避免。

Sessions

你经常会需要保存一些跟用户有关的信息,比如登录状态之类的。如果没有session,用户就得在每个请求当中都携带认证信息。

所谓session就是一组储存在用户浏览器的cookie中的数据,用于标识用户,有时候还会根据应用的需要存储一些额外信息,比如用户的语言之类的。

安全第一要素 - 别把秘密公开

session是一组键/值的哈希,它带有数字签名但是并未加密。这意味着,如果你的签名是安全的,任何第三方都无法伪造session。

这个数字签名保存在@conf/application.conf@中. 一定要保证机密(数字签名)的私有性,绝对不要把它提交到公有代码库中。当你安装了一个由其他人构建的应用时,记得一定要用这个命令@play secret@,来修改原来的数字签名,。

不在session中储存关键数据

尽管有数字签名,但由于cookie是未加密的,你还是不应在session当中存储关键性数据。否则可能被通过查看cookie,或者在局域网/wifi的网关截获http请求等方式暴露。

Play的session是存储在cookie中的,而cookie的大小被浏览器限制为4KB. 除了空间限制外, cookie中还仅能保存文本值。

跨站脚本攻击

跨站脚本攻击是web应用最大的弱点之一。其原理是在使用web应用的表单提交信息时,注入恶意JavaScript脚本. (这就好像送快递的往你家的邮箱里塞一个夹带了窃'听'器的包裹)

Let’s say you’re writing a blog, and anyone can add a comment. If you blindly include what commenters have written into your HTML page, you’re opening your site to attacks. It can be:

  • Show a popup to your visitors
  • Redirect your visitors to a site controlled by the attacker
  • Steal information supposed to be visible only to the current user, and send it back to the attacker’s site

假设你有一个写博客的程序,而任何其它人都可以对博文添加评论,而评论最终会被显示在该。如果你允许评论者们将任何评论信息(比如一段html代码,其中可能还夹杂了javascript)内容提交到你的页面中,你的站点就会被攻击。可能会导致:

  • 你的blog的访客将会收到一个弹出窗,这可能只是恶搞一下
  • 你的blog的访客会被重定向到一个在攻击者控制之下的站点
  • 窃取到本应只有当前用户才能看到的信息,并将其发送到攻击者的站点。

因此避开这些攻击是至关重要的

Play的模板引擎会自动的将文本转义。如果你确实需要在模板中插入未转义的HTML,可以使用raw() 这个java扩展方法。但是如果文本是来自用户的输入,那你就要谨慎为之,确保先对这些输入进行“消毒”。

审查用户输入的时候,使用“白名单(只允许某些安全标签)”比使用“黑名单(禁止某些不安全标签而允许其他标签)”来的安全。

更多关于跨站脚本

SQL 注入

SQL注入是一种利用用户的输入来执行SQL脚本的攻击方式。这种攻击可能摧毁你的数据,也可能使你的数据暴露给攻击者。

如果你使用高级的“find”方法,你必须考虑到对付SQL注入的问题。当你手工创建查询语句时,一定要小心不要使用字符串拼接(+ )的方式传入参数,而应该使用@?@作为占位符然后替换。

这种是安全的:

createQuery("SELECT * from Stuff WHERE type= ?1").setParameter(1, theType);



而这一种则是危险的:

createQuery("SELECT * from Stuff WHERE type=" + theType;



CSRF-跨站请求伪造

CSRF-跨站请求伪造(又有戏称session-riding)也是web应用的一个大问题:

这 种攻击方法的前提是用户(在当前或者最近一段时间)登录了你的应用,浏览器中还保留着cookie。此时如果在该用户访问的某个页面(可能是任何一个其他 的网站)中引入一段恶意的代码或者链接,使之向你的应用发起请求。那由于这个用户的session还没有过期,该请求就会利用这个“伪造”的 session来通过应用的认证,执行恶意的操作了。

要防止这种攻击,首先要正确的使用GET和POST方法. 也就是说,POST方法应该仅用于更改应用的状态. (而相应的GET方法不应该用于更改应用状态,这里也就是所谓的GET方法应该具有等幂性,这样一来攻击者就无法通过恶意的链接来执行恶意操作)。

而对于接受POST请求的controller来说,保证每次收到的请求都是安全的方法之一,就是要求每个请求都提供一个认证口令(这个口令不是存放在cookie中而是作为随表单一起提交的一个隐藏字段)。Play提供了一些内置的帮助类和方法来处理这些事情。

  • controller中有一个@checkAuthenticity()@方法,它会检查包含在请求参数中的口令的合法性,如果发现不对就会返回一个forbidden(403)的响应。
  • session.getAuthenticityToken() 方法会生成一个仅对当前session有效的口令
  • 在html模板的form中使用 #{authenticityToken /} 会生成一个包含口令的隐藏域

So for example:
例如下面的代码(controller中的一个方法):

public static destroyMyAccount() {
    checkAuthenticity();
    …
}



checkAuthenticity()会进行检查,只有提交的表单中包含正确的认证口令(模板中要加入如下面的代码)时才会执行

<form method="post" action="/account/destroy">
    #{authenticityToken /}
    <input type="submit" value="destroy my account">
</form>



Play的“表单标签”: tags:#form 当其要提交到的action接受POST方法时会自动生成一个认证口令

#{form @destroyMyAccount()}
    <input type="submit" value="destroy my account">
#{/form}



当然如果你想把对所有controller的访问都保护起来的话,你可以在增加一个controller的“before filter”: controllers#before,把@checkAuthenticity()@方法加在里面

更多关于跨站请求伪造的信息

 

(原文链接:http://play-framework.herokuapp.com/zh/security " ) 来自"Playframework中文小站 " )

分享到:
评论

相关推荐

    playframework中文教程.zip

    这个“playframework中文教程.zip”压缩包很可能是为了帮助中文用户更好地理解和学习Play Framework而准备的资源。 Play Framework 的主要特点包括: 1. **轻量级**:与传统的Java EE规范相比,Play Framework ...

    Play框架中文文档.pdf

    Play框架中文文档.pdf

    Play Framework Cookbook.pdf

    - **增强安全性措施**:面对日益复杂的网络安全威胁,Play Framework 将不断加强安全防护机制。 - **拓展生态体系**:为了适应不同的应用场景,Play Framework 将逐步丰富其插件生态系统,提供更多实用工具和服务。 ...

    play framework api,play! framework api,play api

    framework api,play api"都是指Play Framework的API文档,它包含了框架的所有公共类、方法和接口,供开发者在编写代码时查阅和引用。API文档是理解框架工作原理、学习如何使用框架功能以及解决问题的关键资源。 ...

    playframework框架项目部署文档

    《Play Framework框架项目部署详解》 Play Framework是一个强大的、基于Java和Scala的开源Web应用程序框架,它采用模型-视图-控制器(MVC)架构模式,以简洁的API和直观的开发体验受到开发者喜爱。本篇文章将详述...

    Play Framework Cookbook

    本书讨论了 Play Framework 中的安全机制,包括认证、授权以及如何防止 SQL 注入等攻击。 - **部署策略**:为了保证应用程序稳定运行,本书提供了关于部署 Play Framework 应用的最佳实践,包括容器化部署、持续集成...

    Play framework框架

    Play Framework框架 Play Framework框架是一种基于Java的软件框架,旨在提高开发效率和提供REST式的架构风格。该框架可以让开发者继续使用他们喜欢的开发环境或繻库,不需要切换到另一种语言、IDE或者其他繻库。 ...

    Play Framework2本教程

    本教程旨在为初学者和有经验的开发者提供全面的指导,帮助他们掌握Play Framework2的核心概念和实践技巧。 在Play Framework2中,你将学习到以下关键知识点: 1. **MVC架构**:Play遵循模型-视图-控制器(MVC)...

    PlayFramework框架安全模块.pdf

    在Play Framework中,安全模块是一个重要的组件,它帮助开发者实现基本的认证(Authentication)和授权(Authorization)功能,确保应用的安全性。 安全模块Secure module 提供了一个基础的控制器`controllers....

    Play Framework应用程序框架 v2.7.9.zip

    在描述中,我们看到的是压缩文件的名字重复,这可能意味着压缩包包含的是Play Framework v2.7.9的完整资源,包括源代码、文档和其他相关文件。对于开发者来说,这样的资源包非常有价值,因为它允许他们深入理解框架...

    PlayFramework框架验证.pdf

    为了支持国际化的错误消息,PlayFramework遵循Java的国际化惯例,错误消息可以从消息包(message bundle)中获取,其中包含的key可以指向一个消息包中的条目,使得错误消息可以针对不同的语言进行翻译。 在Play...

    playframework javaweb

    playframework javaweb playframework javaweb

    play,play framework资料大全

    然后,《playframework_api.rar》则是Play Framework的最新API文档。API文档是开发者日常工作中不可或缺的参考资料,它详尽地列出了框架的所有类、接口、方法,方便开发者查找和使用。 最后,是《play——demo.rar...

    playFramework1.2.3

    6. **模块化设计**:Play Framework允许开发者通过插件系统添加额外的功能,如缓存、安全、邮件服务等。这使得项目结构更加清晰,且方便复用和扩展。 7. **RESTful API支持**:Play Framework鼓励使用RESTful设计...

    play framework 框架手册 word 版

    《Play Framework 框架手册》是一份深入介绍Play框架的文档,主要涵盖了从基础概念到高级特性的全面内容,适合初学者和经验丰富的开发者参考。以下是对手册中部分核心知识点的详细阐述: 1. **MVC应用程序模型**:...

    Mastering Play Framework for Scala

    Mastering Play Framework for Scala

    playframework 框架学习之路 1

    通过这篇学习之路,你将逐步了解如何搭建Play Framework环境,创建第一个应用,理解其核心概念,并可能涉及一些进阶主题,如单元测试、数据库操作和安全控制。深入学习Play Framework将帮助你构建高性能、易于维护的...

    Play framework 2.0 -第一个应用程序

    《Play Framework 2.0 - 创建你的第一个应用程序》 Play Framework 2.0 是一个开源的Web应用框架,它基于Scala和Java语言,遵循“模式-动作”(Action)架构,提供了一种轻量级、敏捷开发的方式。本篇文章将引导你...

    Play Framework

    1. Play Framework 介绍 2. 创建和发布 Play 应用 2.1 创建 Play 的工程 2.2 Play 常用指令 2.3 Play 应用的 JVM 调优 3. 如何读取静态资源 4. Play框架的配置文件 5. 使用 Play 框架开发 Java 应用 5.1 HTTP...

    Play_Framework(手册、配置文档、标签等)

    Play Framework 是一个开源的Web应用框架,用于构建高效、可测试和模块化的Java及...通过学习上述知识点,并参考提供的文档资料,开发者能够深入理解Play Framework的工作原理,从而更好地利用它来构建现代Web应用。

Global site tag (gtag.js) - Google Analytics