25 lines
845 B
Python
25 lines
845 B
Python
|
#!/usr/bin/python3
|
||
|
# Updates subresource integrity attributes in management/templates/index.html
|
||
|
# to prevent CDN-hosted resources from being used as an attack vector. Run this
|
||
|
# after updating the Bootstrap and jQuery <link> and <script> to compute the
|
||
|
# appropriate hash and insert it into the template.
|
||
|
|
||
|
import re, urllib.request, hashlib, base64
|
||
|
|
||
|
fn = "management/templates/index.html"
|
||
|
|
||
|
with open(fn, 'r') as f:
|
||
|
content = f.read()
|
||
|
|
||
|
def make_integrity(url):
|
||
|
resource = urllib.request.urlopen(url).read()
|
||
|
return "sha256-" + base64.b64encode(hashlib.sha256(resource).digest()).decode('ascii')
|
||
|
|
||
|
content = re.sub(
|
||
|
r'<(link rel="stylesheet" href|script src)="(.*?)" integrity="(.*?)"',
|
||
|
lambda m : '<' + m.group(1) + '="' + m.group(2) + '" integrity="' + make_integrity(m.group(2)) + '"',
|
||
|
content)
|
||
|
|
||
|
with open(fn, 'w') as f:
|
||
|
f.write(content)
|