我在这里是一个小菜鸟,所以我想弄清楚一些关于网络安全的基础知识。我有一个非常基本的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)一般来说,还有什么我应该担心的事情?
对,对不起,我不包括设置部分。我在settings dict中有一个'login_url =“/ login”'(传递给'tornado.web.Application'构造函数)。我的理解是Tornado没有内置任何认证机制,所以你必须自己做。我的问题归结为:“将未清理的输入放入'update()'函数是否安全?” – Peter 2013-04-26 16:31:53