异常处理设计 - Google App Engine

6 投票
2 回答
1618 浏览
提问于 2025-04-15 11:25

我正在开发一个基于谷歌应用引擎的项目(使用webapp框架)。我希望大家帮我看看我处理异常的方式。

我处理的异常有四种:

  1. 编程异常
  2. 用户输入错误
  3. 错误的URL
  4. 错误的查询字符串

这是我处理这些异常的方法:

  1. 我创建了一个新的类,继承了webapp.requesthandler类,并重写了handle_exceptions方法。每当发生异常时,我会把用户引导到一个友好的“我们很抱歉”的页面,同时把错误信息发送给管理员。

  2. 在客户端,我会使用JavaScript,并且在服务器端也会进行验证。作为一个没有网页经验的程序员,我认为除了根据编程逻辑(比如检查现金输入是否为浮点数)和业务规则(比如检查用户是否有足够的积分来执行某个操作)来验证输入外,我还需要防范恶意行为。我应该采取什么措施来防止恶意操作呢?

  3. 我有一个通用的URL来处理错误的URL。也就是说,我会把用户引导到一个自定义的“页面不存在”页面。在这方面,我觉得没什么问题。

  4. 错误的查询字符串如果不处理,可能会引发异常。如果某个ID不存在,方法会返回None(这意味着会有异常发生)。如果参数不合适,代码会引发异常。在这种情况下,我认为我应该返回404错误,并把用户引导到自定义的“页面不存在”页面。我该怎么做呢?

你们有什么看法?提前谢谢大家。

2 个回答

0

广告 #4:我通常把查询字符串当作不太重要的东西。如果查询字符串有问题,我会直接展示一个简单的资源页面(就像根本没有查询字符串一样),可能还会给用户一些信息,告诉他们查询字符串哪里出了问题。

这就引出了一个和你提到的第3个问题类似的问题:用户是怎么进入这个错误的查询的?是我的应用程序在某个地方生成了错误的链接吗?还是某个外部服务里的过时链接,或者是保存的书签?HTTP_REFERER可能会提供一些线索,但当然这并不是绝对可靠的,所以我会记录下这个有问题的查询(连同一些额外的HTTP头信息),然后尝试调查一下情况。

5

你似乎考虑得很周全。我想补充一点,你可以看看 Bloog 作为一个例子。Bloog 是一个用 Python 写的,功能不错且受欢迎的开源博客引擎,专门用于 App Engine。

还有,关于第二点,要小心 这种类型跨站脚本攻击

至于第四点,记得404页面其实是一个机会,可以在你的设计中加入一些 色彩和创意

撰写回答