2010-09-14 134 views
4

在我的网站我有一个论坛,我想避免跨站点脚本。你知道一个好的输入验证脚本吗?输入验证检查

+6

验证应该(而且必须)来完成服务器端。你不能相信JavaScript。你使用哪种服务器语言? – Keeper 2010-09-14 11:41:22

+0

是文章帮助完整给你 – 2010-09-14 12:02:09

+2

@Keeper - 做服务器端验证的绝对和一致的必要性并不禁止客户端验证*。 – annakata 2010-09-14 12:06:49

回答

0

这取决于你想在哪里写出数据。例如,当您将文本写入输入字段并将其简单写入html正文中时,您需要使用不同的过滤器。

您应该为服务器端的不同数据类型实施不同的过滤器。我建议你应该在打印出来的时候过滤文本,而不是在用户发送给你的时候(当然这不是关于sql注入和其他服务器端技巧),因为(如上所述)你应该使用过滤器的类型使用取决于打印数据的位置。

如果你想写一个非常简单的论坛,那么它只需要编写一个过滤器就足够了,只需在打印出来之前从文本中删除所有的html标签即可。请注意,它不适用于高级功能,例如编辑注释,预填表格给用户,或者用户可以在评论中使用任何html标记等。

1

有两种方法可以避免跨站点脚本。

  1. 滤波由用户 (主要是脚本标记和HTML标记) 无论是在客户端,以及对 服务器端输入。
  2. 显示内容为 Html实体,以避免跨站点 脚本。当然,如果你想显示一些 的标签,去选项一。 否则选项二更可靠 。

您可以使用正则表达式来过滤客户端以及服务器端的数据。

+0

我正在使用appengine,并且正在编写python .. – arik 2010-09-14 15:46:16

+0

上述两种方法都是独立于语言的。在python中,用're'模块对内容进行过滤具有良好的正则表达式支持。 – 2010-09-15 04:13:52

+0

如果您使用的是带有appengine的Django,它默认会自动转义HTML实体。 – 2010-09-15 04:14:38

1

我一直依赖于OWASP PHP过滤器:http://www.owasp.org/index.php/OWASP_PHP_Filters正如您从名称中可以看出的那样,它们是服务器端(JavaScript或HTML5验证仅用于帮助用户)和OWASP(Open Web Application安全项目)是一个非营利组织。

0

简单。确保在使用它之前从输入对象中跳出HTML。这样,发送的数据将被视为原始文本。做到这一点的方法是在将数据嵌入到页面中(或以某种方式使用它)之前通过某个解析器传递输入。

0

我同意anand和避免XSS的两种主要方法:输入验证和输出转义。为了验证表单输入,绑定到Django的表单验证框架中:http://code.google.com/appengine/articles/djangoforms.html

以下是一些代码示例,用于清除Django模板中的输出。取而代之的是:

Welcome, {{ firstname }}! 

这样做:

Welcome, {{ firstname|escape }}! 

这是从这个非常好的博客文章:http://startupsecurity.info/blog/2008/10/28/avoid-xss-on-google-app-engine/

0

你有两个选项进行验证。对于非敏感数据客户端JavaScript可能会用到。在JavaScript中使用 ,您可以编写简单的函数来验证您的数据。

对敏感数据,你应该使用服务器端脚本一样,PHP,JSP,ASP,asp.net等

可能这会帮助你。