美文网首页
flask-talisman

flask-talisman

作者: _friends | 来源:发表于2018-08-15 15:04 被阅读0次

1.Talisman是一个小型Flask扩展,可处理设置HTTP标头,有助于防止一些常见的Web应用程序安全问题。

默认配置:

  • https除非在启用调试的情况下运行,否则强制所有连接。
  • 启用HTTP严格传输安全性
  • 将Flask的会话cookie设置为secure,因此如果您通过非安全连接以某种方式访问​​应用程序,则永远不会设置它。
  • 将Flask的会话cookie设置为httponly阻止JavaScript访问其内容。CSRF通过Ajax使用单独的cookie,应该不受影响。
  • 设置 X框选项 ,以SAMEORIGIN避免 点击劫持
  • 设置X-XSS-Protection以启用IE / Chrome的跨站点脚本过滤器。
  • 设置X-Content-Type-Options以防止IE> = 9的内容类型嗅探。
  • 设置X-Download-Options以防止IE> = 8打开文件下载。
  • 设置一个严格的内容安全策略default-src: 'self'。这旨在几乎完全防止跨站点脚本(XSS)攻击。这可能是您应该合理改变的唯一设置。请参阅 内容安全策略部分。
  • 设置一个严格的推荐人,政策strict-origin-when-cross-origin管辖,其引用的信息应包含的请求。
    除了Talisman之外,您应该始终使用跨站点请求伪造(CSRF)库。强烈建议使用 基于Django优秀库的Flask-SeaSurf

2.下载安装:

pip install flask-talisman

安装完成后,将Flask应用程序包装为Talisman:

from flask import Flask
from flask_talisman import Talisman

app = Flask(__name__)
Talisman(app)

3.选项:

* feature_policy,默认{},请参阅“功能政策”部分。
* force_https,default True,强制所有非调试连接 https
* force_https_permanent,默认情况下False,使用301的,而不是 302https重定向。
* frame_options,默认情况下SAMEORIGIN,可以是SAMEORIGINDENYALLOWFROM

1.DENY:表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
2.SAMEORIGIN:表示该页面可以在相同域名页面的 frame 中展示。
3.ALLOW-FROM:表示该页面可以在指定来源的 frame 中展示。
4.换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。

* frame_options_allow_from,default None,一个字符串,表示允许通过iframe嵌入网站的域。
* strict_transport_security,默认True,是否发送HSTS标头。
* strict_transport_security_preload,默认False,启用HSTS预加载如果您使用Google的HSTS预加载列表注册您的应用程序 ,Firefox和Chrome将永远不会通过非安全连接加载您的网站。
* strict_transport_security_max_age,默认ONE_YEAR_IN_SECS,浏览器将尊重HSTS标头的时间长度。
* strict_transport_security_include_subdomains,默认情况下True,子域是否也应使用​​HSTS。
* content_security_policy,默认default-src: 'self',请参阅“ 内容安全策略”部分。
* content_security_policy_nonce_in,默认[]。添加每请求的随机数.对于flask请求对象以及指定的CSP头部分的值。即['script-src','style-src']
* content_security_policy_report_only,默认情况下False,是否将CSP标头设置为“仅报告”(作为Content-Security-Policy-Report-Only)以通过禁用浏览器的策略实施来简化部署,需要使用content_security_policy_report_uri 参数传递值
* content_security_policy_report_uri,default None,一个字符串,指示用于CSP违规报告的报告URI
* referrer_policy,default strict-origin-when-cross-origin,一个字符串,用于将Referrer Policy标头设置为在执行同源请求时发送完整URL,仅将文档的来源发送到同等安全的目标(HTTPS-> HTTPS),并且不向较少的目标发送标头安全目标(HTTPS-> HTTP)。
* session_cookie_secure,默认情况下True,将会secure话cookie设置为,以防止它通过普通发送http
* session_cookie_http_only,默认情况下True,将会httponly话cookie设置为,以防止它被JavaScript读取。
* force_file_save,默认情况下False,是否将 X-Download-Options标题设置noopen为阻止IE> = 8直接打开文件下载并仅保存它们

4.内容安全政策

默认内容安全策略非常严格,将阻止加载与应用程序不在同一域中的任何资源。大多数Web应用程序都需要更改此策略。

可以使用稍微宽松的策略 flask_talisman.GOOGLE_CSP_POLICY,允许从YouTube和地图加载Google托管的JS库,字体和嵌入媒体。

您可以而且应该创建自己的政策以满足您网站的需求。以下是一些改编自MDN的例子 :

例1

这是默认策略。网站管理员希望所有内容都来自网站自己的来源(这不包括子域名。)

csp = {
    'default-src': '\'self\''
}
talisman = Talisman(app, content_security_policy=csp)

例2

网站管理员希望允许来自受信任域及其所有子域的内容(它不必与设置CSP的域相同。)

csp = {
     ' default-src ':[
         ' \' self \' ',
         ' * .trusted.com '
    ]
}

例3

网站管理员希望允许Web应用程序的用户将来自任何来源的图像包含在他们自己的内容中,但是将音频或视频媒体限制为可信提供者,并且仅将所有脚本限制为托管可信代码的特定服务器。

csp = {
     ' default-src ':' \' self \' ',
     ' img-src ':' * ',
     ' media-src ':[
         ' media1.com ',
         ' media2.com ',
    ]
    ' script-src ': ' userscripts.example.com ' 
}

在此示例中,仅允许来自文档来源的内容,但以下情况除外:

  • 图像可以从任何地方加载(注意*通配符)。
  • 媒体仅允许来自media1.com和media2.com(而不是来自这些网站的子域)。
  • 只允许来自userscripts.example.com的可执行脚本。

例4

在线银行网站的网站管理员希望确保使用SSL加载其所有内容,以防止攻击者窃听请求。

csp = {
     ' default-src ':' https://onlinebanking.jumbobank.com ' 
}

服务器仅允许通过单一来源onlinebanking.jumbobank.com访问通过HTTPS专门加载的文档。

例5

Web邮件站点的网站管理员希望允许在电子邮件中使用HTML,以及从任何地方加载的图像,但不允许JavaScript或其他潜在危险内容。

csp = {
     ' default-src ':[
         ' \' self \' ',
         ' * .mailsite.com ',
    ]
    ' img-src ': ' * ' 
}

注意,这个例子没有指定script-src; 使用示例CSP,此站点使用default-src 指令指定的设置,这意味着只能从源服务器加载脚本。

例6

网站管理员希望允许嵌入式脚本(可能是动态生成的)。

csp = {
    'default-src': '\'self\'',
    'script-src': '\'self\'',
}
talisman = Talisman(
    app,
    content_security_policy=csp,
    content_security_policy_nonce_in=['script-src']
)

需要将随机数添加到模板中的脚本标记中:

< script  nonce = “ {{csp_nonce()}} ” >
    // ...
< / script >

请注意,需要明确定义应添加nonce -...源的CSP指令(示例中的script-src)。

5.功能政策

默认功能策略为空,因为这是默认的预期行为。请注意,功能政策仍然是草案https://wicg.github.io/feature-policy/, 并在Chrome和Safari中受支持。

地理位置示例

禁用对Geolocation接口的访问。

feature_policy = {
    'geolocation': '\'none\''
}
talisman = Talisman(app, feature_policy=feature_policy)

GitHub地址:https://github.com/GoogleCloudPlatform/flask-talisman

相关文章

  • flask-talisman

    1.Talisman是一个小型Flask扩展,可处理设置HTTP标头,有助于防止一些常见的Web应用程序安全问题。...

网友评论

      本文标题:flask-talisman

      本文链接:https://www.haomeiwen.com/subject/odhwbftx.html