@ru_python

Страница 6661 из 9768
Yes
04.10.2018
05:49:52
посоветуйте как оптимизировать следующую задачу: в базу делается запрос , ответ надо записать в csv файл. пользуюсь библиотекой csv. итоговый размер файла примерно 3 GB + . На данный момент циклом пробегаюсь по листу и записываю каждую строчку csvwriter.writerow(item) после цикла закрываю файл csvfile.close()

Google
Василий
04.10.2018
05:55:07
И еще csv файлы отлично пережимаются через gzip -9

Nikolay
04.10.2018
05:58:27
Это не дамп. Это COPY
Со стороны сервера бд - дамп

Sergey
04.10.2018
05:59:50
Со стороны сервера бд - дамп
в самой бд команда copy есть

или утилита хз как обозвать

Aragaer
04.10.2018
06:07:06
ты где ее надыбал
Купил в японии на амазоне. В смысле физически был в японии и заказал на амазоне с доставкой в ближайший супермаркет.

Aragaer
04.10.2018
06:09:18
у меня он есть



Nikolay
04.10.2018
06:10:54
О! Глюк какой-то на моей стороне

Xorry
04.10.2018
06:23:58
Привет! Я изучаю вопрос безопасности передачи строковых шаблонов форматирования ("".format()). Можете, пожалуйста, показать вариант эксплуатации с выводом значения глобальной переменной?

Google
Xorry
04.10.2018
06:28:57
А документацию что мешает посмотреть?)
Может мне ещё погуглить? Давайте сразу этот чат удалим, он же не для помощи

Я уже погуглил(интересует v3.6.6) и ничего существенного не нашёл

Sergey
04.10.2018
06:31:36
Может мне ещё погуглить? Давайте сразу этот чат удалим, он же не для помощи
обычно так и делают, потом если непонятно или нет ответа приходят и спрашивают

Aragaer
04.10.2018
06:32:12
/me - вредный, может просто прийти и спросить что-то такое, что гуглить дольше, чем ответить. Как вчера про datetime

Xorry
04.10.2018
06:33:05
Меня вариант со строками интересовал, но тут надо финты ушами сделать что бы object поискать)

Aragaer
04.10.2018
06:33:20
в 3.6 наверно можно через f-строки как-то схулиганить

Nikolay
04.10.2018
06:33:24
/kekme

Alex
04.10.2018
06:33:27
гхм.... я немного не согласен, да этот вопрос таки гуглится, но он точно не описан явно в документации. поэтому в сей раз я встану на защиту новичка.

в 3.6 наверно можно через f-строки как-то схулиганить
как раз таки f-строки безопасны, так как ими могут быть только строковые литералы

а форматированная строка может прийти из небезопасного источника

Aragaer
04.10.2018
06:33:55
ок

а, то есть предполагается, что кто-то сконструячил что-то хитрое, а мы ему вызываем .format

Xorry
04.10.2018
06:34:48
Угу, оно самое

Alex
04.10.2018
06:34:56
а, то есть предполагается, что кто-то сконструячил что-то хитрое, а мы ему вызываем .format
ну это единственный вариант (насколько мне известно), при котором формат может быть небезопасен

Aragaer
04.10.2018
06:35:03
https://www.python.org/dev/peps/pep-3101/

в документации ссылка на этот пеп

я не вижу там чего-то страшного, но может быть можно как-то добраться до кишков того словаря, который передается в format

Google
Aragaer
04.10.2018
06:36:46
и через него выбраться наружу

Alex
04.10.2018
06:37:03
Меня вариант со строками интересовал, но тут надо финты ушами сделать что бы object поискать)
да, но если бы эта проблема лежала наповерхности, разработчики ее давно бы уже закрыли.

Aragaer
04.10.2018
06:37:31
собственно в том же си printf уязвим через отсутствие проверки _числа_ аргументов, что позволяет нахватать аргументов со стека

Aragaer
04.10.2018
06:38:10
вот, да, я про это

Sergey
04.10.2018
06:38:20
Угу, оно самое
а от чего обезопаситься?

Aragaer
04.10.2018
06:38:21
то есть из форматной строки в питоне доступ только до того, что в нее передано

Xorry
04.10.2018
06:40:02
а от чего обезопаситься?
Просто хочу закрепить на практике. А так обезопаситься от пользовательского ввода можно через string.Template

Alex
04.10.2018
06:40:09
а от чего обезопаситься?
от доступа к приватной информации.

Nikolay
04.10.2018
06:41:11
Присылайте ваши приватные ключи

Aragaer
04.10.2018
06:41:31
>>> class X: ... def p(self): ... print("hello, world") ... >>> "{0.p}".format(X()) '<bound method X.p of <__main__.X object at 0x7f022646b588>>' >>> "{0.p()}".format(X()) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'X' object has no attribute 'p()'

до полей добраться можно, но ни один метод вызвать нельзя

Xorry
04.10.2018
06:42:01
__globals__ бы какой-то дёргнуть

Aragaer
04.10.2018
06:42:15
по-моему все внутренние поля закрыты

__dict__ пустой

а, не, __doc__ нормально отдается

что-то отдается, что-то нет

Alex
04.10.2018
06:44:58
Python 3.7.0 (default, Sep 18 2018, 18:47:22) [Clang 9.1.0 (clang-902.0.39.2)] on darwin >>> SECRET = 'secret_key' >>> class X: ... def __init__(self): ... pass ... >>> x = X() >>> '{0.__init__.__globals__[SECRET]}'.format(x) 'secret_key'

Aragaer
04.10.2018
06:46:03
>>> class X: ... "test" ... def p(self): ... print("hello, world") ... >>> "{0.__class__.__dict__}".format(X()) "{'__module__': '__main__', '__doc__': 'test', 'p': <function X.p at 0x7f022645fb70>, '__dict__': <attribute '__dict__' of 'X' objects>, '__weakref__': <attribute '__weakref__' of 'X' objects>}"

Google
Sergey
04.10.2018
06:46:52
а зачем пользовательский ввод в формат засовывать вообще?

Aragaer
04.10.2018
06:47:01
у меня не отдает

Xorry
04.10.2018
06:47:10
а зачем пользовательский ввод в формат засовывать вообще?
Ну на пример в боте приветствие, но можно риплейсом, не спорю.

Alex
04.10.2018
06:47:12
у меня не отдает
ты что-то делаешь не так

Aragaer
04.10.2018
06:47:17
>>> "{0.__init__.__globals__['_SECRET']}".format(X()) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'method-wrapper' object has no attribute '__globals__'

а, надо метод init

Alex
04.10.2018
06:47:40
а зачем пользовательский ввод в формат засовывать вообще?
возможно кому-то захотелось иметь самый примитивный вариант шаблонов

Aragaer
04.10.2018
06:48:25
>>> "{0.p.__globals__}".format(X()) "{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'X': <class '__main__.X'>, '_SECRET': 'XXX'}" >>> "{0.p.__globals__['_SECRET']}".format(X()) Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: "'_SECRET'"

Alex
04.10.2018
06:48:35
ну т.е. это весьма полезно знать, что str.format небезопасен

Aragaer
04.10.2018
06:48:37
интересно - если словарь целиком печатать, ключ есть. Если явно ключ - нету

?
04.10.2018
06:48:56
@deluxoft от моего сервака, есле найдешь?

Aragaer
04.10.2018
06:49:09
а, ок

>>> "{0.p.__globals__[subprocess].Popen}".format(X()) "<class 'subprocess.Popen'>"

вайкрастота

Xorry
04.10.2018
06:50:46
Проще урезаную форматилку прикрутить. Ну через строку походу нельзя вылезти

Alex
04.10.2018
06:50:50
Проще урезаную форматилку прикрутить. Ну через строку походу нельзя вылезти
согласен, string.Template или mako куда проще чем крутить валидацию

более того в той статье Армина, что я скинул в самом начале описана возможная реализация безопасных строковых шаблонов

Google
Sergey
04.10.2018
06:53:05
Alex
04.10.2018
06:53:06
никакой "валидации" вкорячивать не нужно, да и я слабо представляю как ты будешь ее делать.

Aragaer
04.10.2018
06:53:08
mustache

Alex
04.10.2018
06:53:41
ну дак это нельзя назвать валидацией ?
эм... нет, это использование другого (безопасного) движка для шаблонов. при чем тут валидация?

Sergey
04.10.2018
06:54:50
эм... нет, это использование другого (безопасного) движка для шаблонов. при чем тут валидация?
ну дак этот движок и занимается безопасностью вводных данных это не валидация?

Alex
04.10.2018
06:55:38
ну дак этот движок и занимается безопасностью вводных данных это не валидация?
мы же говорим о безопасности шаблона, и о том что из шаблона можно выйти наружу.

кстати mako небезопасен, а в jinja2 эта проблема была явно решена

Philipp
04.10.2018
08:10:26
Ребят, а где почитать про нюансы использования тех или иных "конструкций"? Например, что лучше использовать - list(filter(lambda x: x > 5, [3, 4, 5, 6, 7])) или [x for x in [3, 4, 5, 6, 7] if x > 5] и в каких случаях?

Страница 6661 из 9768