python - 保护 bottle.py web 应用程序免受 XSS 和 CSRF 攻击的方法?

标签 python security wsgi bottle

我正在使用 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/

相关文章:

python - WSGI 与 PYthon/Django : serving alternating old and new versions of app 的怪异

python - 如何启用跨 Django 站点的身份验证,并透明地保留任何 POST 或 GET 数据?

python excel处理错误

python - 将 os.system 的输出打印到屏幕上并根据它采取行动

python - 正确分配Python中的数据结构

Python 程序可以在 Windows 上运行,但不能在 Linux 上运行

objective-c - 在 Cocoa 和 NSTask 中安全地处理密码

linux - OpenVAS 扫描不工作 - Kali linux

php - 如何让这个登录系统更安全

python - django wsgi错误没有找到名为站点名称的模块