1

我在这里有点菜鸟,所以我试图找出一些关于网络安全的基础知识。我有一个非常基本的 Tornado 服务器正在运行,虽然它仅供我使用,但我想确保我没有犯任何明显的安全错误。

1)除了登录处理程序之外的每个处理程序都由@tornado.web.authenticated. 未经身份验证的用户是否可以提交给我的 AJAX 处理程序等?(即我需要为他们担心多少?)

2)这是我的登录和身份验证交易:

def do_auth(name, password):
  with open(auth_file) as f:
    lines = f.readlines()
  for l in lines:
    u,s,h = l.strip().split(':')
    if name == u:
      s5 = hashlib.sha512()
      s5.update(s.decode('hex'))
      s5.update(password)
      if h == s5.hexdigest():
        return True
  return False

class LoginHandler(BaseHandler):
  def get(self):
    self.write('<html><body><form action="/login" method="post">'
               'Name: <input type="text" name="name"><br />'
               'Password: <input type="password" name="password"><br />'
               '<input type="submit" value="Sign in">'
               '</form></body></html>')

  def post(self):
    if do_auth(self.get_argument("name"), self.get_argument("password")):
      self.set_secure_cookie("user", self.get_argument("name"))
      self.redirect("/")
    else:
      self.redirect("/login")

关键是不受信任的输入仅用于 python 的 urllib.sha512.update() 函数和字符串比较。这是“安全的”吗?[注意:授权文件是手工制作的,代码中没有更改它的功能。]

3)一般来说,我还应该担心什么?

4

1 回答 1

0

让我尝试回答其中的一些问题:

(1)

除了登录处理程序之外的每个处理程序都由@tornado.web.authenticated 修饰。未经身份验证的用户是否可以提交给例如 AJAX 处理程序

如果您的 AJAX 处理程序使用 @tornado.web.authenticated 修饰,则用户必须登录才能调用它。

如果它没有被装饰,任何人都可以访问它,并且您可以使数据公开可见和/或可写。公开可见可能没问题,但公开可写可能不好。这取决于你的数据是什么。

(2) 你不需要编写自己的 do_auth() 函数只是一个

def get_login_url(self):
        return u"/login"

指向您的登录页面的函数

于 2013-04-26T13:06:48.963 回答