Создать сохранить имена файлов из userinput в Python - PullRequest
0 голосов
/ 27 февраля 2011

Я программирую IRC и XMPP бот, который должен преобразовывать введенные пользователем данные в имя файла.Я уже написал функцию для этого.Достаточно ли это нормально?

Вот код:

allowednamechars = string.ascii_letters + string.digits + '_+/$.-'

def stripname(name, allowed=""):
    """ strip all not allowed chars from name. """
    n = name.replace(os.sep, '+')
    n = n.replace("@", '+')
    n = n.replace("#", '-')
    n = n.replace("!", '.')
    res = u""
    for c in n:
        if ord(c) < 31: continue
        elif c in allowednamechars + allowed: res += c
        else: res += "-" + str(ord(c))
    return res

Это белый список с дополнительным кодом для удаления управляющих символов и замены os.sep, а также некоторые повторы для создания имени файла Google App Engine совместимый.

Этот бот находится на http://jsonbot.googlecode.com.

Так что вы думаете об этом?

Ответы [ 2 ]

0 голосов
/ 02 марта 2011

urllib.quote(name.encode("utf8")) создаст что-то понятное человеку, что также должно быть безопасным. Пример:

In [1]: urllib.quote(u"foo bar$=+:;../..(boo)\u00c5".encode('utf8'))
Out[1]: 'foo%20bar%24%3D%2B%3A%3B../..%28boo%29%C3%85'
0 голосов
/ 28 февраля 2011

Вы можете подумать о том, чтобы просто набрать base64.urlsafe_b64encode(name), которое всегда будет выдавать безопасное имя, если только вы действительно не хотите, чтобы имя файла читалось человеком. В противном случае число крайних случаев довольно велико, и если вы забудете один из них, у вас возникнут проблемы с безопасностью.

...