Поиск уязвимостей в моем коде (метод разделения)

#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