HTML sanitizing: allow specification of parts of style names
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3573 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
eb89194421
commit
6eba456319
1 changed files with 14 additions and 4 deletions
18
util/html.py
18
util/html.py
|
@ -24,13 +24,13 @@ $Id$
|
||||||
|
|
||||||
from cybertools.text.lib.BeautifulSoup import BeautifulSoup, Comment
|
from cybertools.text.lib.BeautifulSoup import BeautifulSoup, Comment
|
||||||
|
|
||||||
#validTags = 'p i strong b u a h1 h2 h3 img pre br'.split()
|
validTags = ('b br div em font h1 h2 h3 i li ol p pre span strong '
|
||||||
validTags = 'b br div em font h1 h2 h3 i p pre span strong table td tr u'.split()
|
'table td tr u ul').split()
|
||||||
|
|
||||||
#validAttrs = 'href src'.split()
|
|
||||||
validAttrs = 'class style'.split()
|
validAttrs = 'class style'.split()
|
||||||
|
|
||||||
validStyles = 'font-style font-weight'.split()
|
validStyles = 'font-style font-weight'.split()
|
||||||
|
validStyleParts = 'border padding'.split()
|
||||||
|
|
||||||
|
|
||||||
def sanitize(value, validTags=validTags, validAttrs=validAttrs,
|
def sanitize(value, validTags=validTags, validAttrs=validAttrs,
|
||||||
|
@ -43,6 +43,7 @@ def sanitize(value, validTags=validTags, validAttrs=validAttrs,
|
||||||
tag.hidden = True
|
tag.hidden = True
|
||||||
attrs = []
|
attrs = []
|
||||||
for attr, val in tag.attrs:
|
for attr, val in tag.attrs:
|
||||||
|
attr = attr.lower()
|
||||||
if attr not in validAttrs:
|
if attr not in validAttrs:
|
||||||
continue
|
continue
|
||||||
if attr == 'style':
|
if attr == 'style':
|
||||||
|
@ -58,6 +59,15 @@ def sanitizeStyle(value, validStyles=validStyles):
|
||||||
for item in value.split(';'):
|
for item in value.split(';'):
|
||||||
if ':' in item:
|
if ':' in item:
|
||||||
k, v = item.split(':')
|
k, v = item.split(':')
|
||||||
if k.strip() in validStyles:
|
if checkStyle(k):
|
||||||
result.append(item.strip())
|
result.append(item.strip())
|
||||||
return '; '.join(result)
|
return '; '.join(result)
|
||||||
|
|
||||||
|
def checkStyle(k):
|
||||||
|
k = k.strip().lower()
|
||||||
|
if k in validStyles:
|
||||||
|
return True
|
||||||
|
for name in validStyleParts:
|
||||||
|
if k.startswith(name):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
Loading…
Add table
Reference in a new issue