我正在使用 bottle.py
、用于 session 的 Beaker
和一个自定义的 AAA 编写模块编写一个网络应用程序,因为很多我担心安全性和最佳方法以防止像我提到的那样的一些有针对性的攻击。</p>
例如,我有以下代码:
@route('/manage/adddomain',method='POST')
def adddomain():
#This checks if user has enough power to create a domain
aaa.require(50,'/forbidden')
user = aaa.getusername() # This is retrieved from a server side session
domainname = request.forms.get('domain')
description = request.forms.get('description')
# Additional checks are performed in the sql module
# to protect against forged requests with valid login
return sql.createdomain(user,domainname,description)
您会执行哪些额外检查来保护您的网络应用程序?
最佳答案
Blender 几乎涵盖了您的需要,但我想添加另一种方法。您可以添加一个包装器,而不是检查每个 POST:
def wrap_requires_csrf(*methods):
def wrapper(fn):
@wraps(fn)
def wrapped(*args, **kwargs):
if request.method in methods:
if request.method == 'POST':
csrf = request.form.get('csrf')
elif request.method == 'GET':
csrf = request.args.get('csrf')
if not csrf or csrf != session.get('csrf'):
abort(400)
session['csrf'] = generate_csrf_token()
return fn(*args, **kwargs)
return wrapped
return wrapper
@app.route('/some/page', methods=['GET','POST'])
@wrap_requires_csrf('POST')
def some_page():
...
然后,在您的模板中,您将为隐藏字段提供
<input name="csrf" type="hidden" name="{{session.csrf}}" />
关于python - 保护 bottle.py web 应用程序免受 XSS 和 CSRF 攻击的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16025932/