我在这里有点菜鸟,所以我试图找出一些关于网络安全的基础知识。我有一个非常基本的 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)一般来说,我还应该担心什么?