SQL注入和Clickjack保护
SQL注入保护
SQL注入是一种恶意用户能够在数据库上执行任意SQL代码的攻击类型。这可能会导致记录被删除或数据泄漏。
通过使用Django的查询集,生成的SQL将被底层数据库驱动程序正确转义。但是,Django还为开发人员提供了编写原始查询或执行自定义sql的能力。应该谨慎使用这些功能,并且您应该小心妥善地转义用户可以控制的任何参数。另外,使用extra()时应该小心。
点击劫持保护
点击劫持是一种恶意网站在一个框架中包装另一个网站的攻击类型。当恶意网站欺骗用户点击隐藏的框架或iframe中加载的其他网站的隐藏元素时,会发生此类攻击。
Django包含X-Frame-Options中间件形式的clickjacking保护,在支持的浏览器中可以防止站点在框架内呈现。可以基于每个视图禁用保护或配置发送的确切报头值。
强烈建议中间件用于任何不需要第三方站点将其页面包装在一个框架中的站点,或者只需要允许该站点的一小部分使用该中间件。
Clickjacking的一个例子
假设在线商店有一个页面,登录的用户可以点击“立即购买”来购买商品。为方便起见,用户选择始终保持登录商店。攻击者网站可能会在其自己的某个页面上创建一个“我喜欢小马”按钮,并将该商店的页面加载到透明的iframe中,以便“立即购买”按钮无形覆盖在“我喜欢小马”按钮上。如果用户访问攻击者的网站,点击“我喜欢小马”会导致无意中点击“立即购买”按钮和未知购买该项目。
防止点击劫持
现代浏览器承认X-Frame-Options HTTP标头,该标头指示是否允许在帧或iframe中加载资源。如果响应包含值为SAMEORIGIN的头部,则浏览器将只在源自同一站点的请求中加载资源。如果标题设置为拒绝,那么无论哪个站点发出请求,浏览器都会阻止资源加载到框架中。
Django提供了几种简单的方法在您的站点的响应中包含这个头文件:
-
一个简单的中间件,它在所有响应中设置标题。
-
一组视图装饰器,可用于覆盖中间件或仅为某些视图设置标题。
如何使用它
为所有响应设置X-Frame-Options
要为您的网站中的所有响应设置相同的X-Frame-Options值,请将'django.middleware.clickjacking.XFrameOptionsMiddleware'设置为MIDDLEWARE_CLASSES:
MIDDLEWARE_CLASSES = [
# ...
'django.middleware.clickjacking.XFrameOptionsMiddleware',
# ...
]
该中间件在startproject生成的设置文件中启用。
默认情况下,中间件将为每个传出的HttpResponse设置X-Frame-Options标头为SAMEORIGIN。 如果您想要使用DENY,请设置X_FRAME_OPTIONS设置:
X_FRAME_OPTIONS = 'DENY'
在使用中间件时,可能会出现一些您不希望X-Frame-Options标头设置的视图。 对于这些情况,您可以使用视图装饰器来告诉中间件不要设置标题:
from django.http import HttpResponse
from django.views.decorators.clickjacking import xframe_options_exempt
@xframe_options_exempt
def ok_to_load_in_a_frame(request):
return HttpResponse("This page is safe to load in a frame on any site.")
设置每个视图的X-Frame-Options
为了在每个视图基础上设置X-Frame-Options标头,Django提供了这些装饰器:
from django.http import HttpResponse
from django.views.decorators.clickjacking import xframe_options_deny
from django.views.decorators.clickjacking import xframe_options_sameorigin
@xframe_options_deny
def view_one(request):
return HttpResponse("I won't display in any frame!")
@xframe_options_sameorigin
def view_two(request):
return HttpResponse("Display in a frame if it's from the same
origin as me.")
请注意,您可以将装饰器与中间件一起使用。 使用装饰器会覆盖中间件。
限制
X-Frame-Options标题只能防止在现代浏览器中发生点击劫持。
较旧的浏览器将悄悄忽略标题并需要其他防止点击劫持技术。
支持X-Frame-Options的浏览器
- Internet Explorer 8+
- Firefox 3.6.9+
- Opera 10.5+
- Safari 4+
- Chrome 4.1+