2013-04-24 108 views
1

我在这里是一个小菜鸟,所以我想弄清楚一些关于网络安全的基础知识。我有一个非常基本的Tornado服务器正在运行,虽然它只用于我,但我想确保我没有犯任何明显的安全错误。Python龙卷风:这是安全的吗?

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)一般来说,还有什么我应该担心的事情?

回答

0

,让我试着回答一些这样的:

(1)

除了登录处理每一个处理程序由@ tornado.web.authenticated装饰。可能如果你的AJAX处理上装饰有@ tornado.web.authenticated未经身份验证的用户提交,e.g.my AJAX处理

那么用户必须先登录来调用它。

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

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

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

功能指向您的登录页面

+0

对,对不起,我不包括设置部分。我在settings dict中有一个'login_url =“/ login”'(传递给'tornado.web.Application'构造函数)。我的理解是Tornado没有内置任何认证机制,所以你必须自己做。我的问题归结为:“将未清理的输入放入'update()'函数是否安全?” – Peter 2013-04-26 16:31:53