Python龙卷风:这样安全吗?

时间:2013-04-24 20:11:50

标签: python-2.7 security tornado cryptographic-hash-function

我在这里有点像菜鸟,所以我想弄清楚一些关于网络安全的基础知识。我有一个非常基本的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()函数中使用,并用于字符串比较。这是“安全的”吗? [注意:auth文件是手工制作的,代码中没有任何功能可以更改它。]

3)一般来说,我应该担心哪些其他事情?

1 个答案:

答案 0 :(得分:0)

让我试着回答一下:

(1)

  
    

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

  

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

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

(2)您不需要只编写自己的do_auth()函数

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

功能指向您的登录页面

相关问题