#python #security
#python #Безопасность
Вопрос:
Здесь я попытался воссоздать str.split()
метод на Python. Я пробовал и тестировал этот код, и он работает нормально, но я ищу уязвимости для исправления. Проверьте это и дайте отзыв, если таковой имеется. Редактировать: Прошу прощения за неясность, я хотел спросить вас, ребята, об исключениях, когда код не будет работать.Я также пытаюсь придумать более изысканный способ, не глядя на исходный код.
def splitt(string,split_by = ' '):
output = []
x = 0
for i in range(string.count(split_by)):
output.append((string[x:string.index(split_by,x 1)]).strip())
x = string.index(split_by,x 1)
output.append((((string[::-1])[:len(string)-x])[::-1]).strip())
return output
Комментарии:
1. Что вы подразумеваете под «уязвимостями»? Угловые случаи, когда функция ломается?
2. Я также хотел бы знать, что вы имеете в виду.
3. Термин «уязвимость» обычно используется для обозначения проблем безопасности, а не ошибок программирования в целом (хотя многие ошибки могут приводить к уязвимостям в зависимости от того, где используется ошибочный код).
4. извините, ребята, за прямоту, я имел в виду исключения, когда код не будет работать должным образом, или более эффективные способы воссоздания метода разделения
Ответ №1:
На самом деле с вашим кодом есть несколько проблем:
- выполняя поиск из
x 1
, вы можете пропустить появлениеsplit_by
в самом начале строки, что приведет кindex
сбою на последней итерации - вы вызываете
index
чаще, чем необходимо strip
имеет смысл, только если разделитель является пробелом, и даже тогда может быть удалено больше, чем предполагалось, например, конечные пробелы при разделении строк- вместо этого добавьте
len(split_by)
к смещению для следующего вызоваindex
- нет необходимости дважды переворачивать строку на последнем шаге
Это должно устранить эти проблемы:
def splitt(string,split_by=' '):
output = []
x = 0
for i in range(string.count(split_by)):
x2 = string.index(split_by, x)
output.append((string[x:x2]))
x = x2 len(split_by)
output.append(string[x:])
return output