- Хроники. - http://usanov.net -

Чистим HTML в AppEngine (Sanitize HTML)

Posted By Ikutsin On 5 апреля 2010 @ 12:59 In Python | Comments Disabled

[1]Если вы разрешаете вводить информацию пользователям, ее обязательно надо проверять. В простейшем случае можно просто обрезать все теги, как было показано в статье о валидации [2] . Но, что, если некоторые теги (картинки, жирный, наклон, и т.д.), все-таки нужно разрешить? Хорошим примером проверки форм, служит stackoverflow.com [3] и конечно сотни тысяч других. Первый меня заинтересовал прежде всего по тому, что существует его свободный клон на Python (оригинал-же работает на технологии .NET).

Основная задача санитара HTML — пропустить теги и аттрибуты, которые присутствуют в белом листе, и исключить или преобразовать все остальные. Из Питонового клона stackoverflow [4] нас интересует конфигурация дезинфицирования HTML [5]. Он работает использую библиотеку html5lib [6], логическое продолжение BeautyfulSoup. Качаем все это дело к себе в проект.

Кстати, с самого начала я нашел appengine-html-whitelist [7]. — этот дезинфектор выполнен как сервис, которые получает HTML как параметр и возвращает очищенный на основе правил HTML в разных форматах. Проверьте, возможно это то, что вам надо.

Использовать санитара очень просто:

def sanitize(request):
 data = request.POST.get('data', None)
 if data: data = utility.html.sanitize_html(data)
 return utility.respond(request, "internal/sanitize.html", {"data":data})

И соответственно шаблон:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
{{ data }}
<form method="post" action="">
<textarea name="data" COLS=40 ROWS=6>{{ data }}</textarea>
<input type="submit" value="submit">
</form>
</body>
</html>


Article printed from Хроники.: http://usanov.net

URL to article: http://usanov.net/1397-chistim-html-v-appengine-sanitize-html

URLs in this post:

[1] Image: http://usanov.net/wp-content/uploads/2010/04/sanitize.png

[2] о валидации: http://usanov.net/1374-appengine-validaciya-polej-bazy-i-formy

[3] stackoverflow.com: http://meta.stackoverflow.com/questions/1777/what-html-tags-are-allowed-on-stack-overflow-server-fault-and-super-user

[4] Питонового клона stackoverflow: http://code.google.com/p/soclone/

[5] конфигурация дезинфицирования HTML: http://code.google.com/p/soclone/source/browse/trunk/soclone/utils/html.py

[6] html5lib: http://code.google.com/p/html5lib/

[7] appengine-html-whitelist: http://code.google.com/p/appengine-html-whitelist/

Copyright © 2008 Все, что меня окружает. All rights reserved.