Избегайте внедрения кода при просмотре веб-сайтаPython

Программы на Python
Ответить
Anonymous
 Избегайте внедрения кода при просмотре веб-сайта

Сообщение Anonymous »

Я собираюсь просмотреть веб-сайт, чтобы получить ссылки на все конечные страницы. Это работает:

Код: Выделить всё

from bs4 import BeautifulSoup
from html import escape

root = '''
[url=a][/url]
[url=b][/url]
[url=c][/url]
'''
a = ''
b = '''
[url=d][/url]
'''
c = ''
d = ''

def discover_nodes(node, leaf_nodes=[]):

node_value = eval(escape(node))
soup = BeautifulSoup(node_value, 'lxml')
links = soup.find_all('a')

if len(links) == 0:
leaf_nodes.append(node)
return

for link in links:
href = link['href']
discover_nodes(href, leaf_nodes)

return leaf_nodes

print(discover_nodes('root'))
Вывод:

Код: Выделить всё

['a', 'd', 'c']
Но меня беспокоит использование eval():

Код: Выделить всё

node_value = eval(node)
Предотвратит ли использование html.escape внедрение кода? Есть ли способ избежать этого или есть лучшие подходы?


Подробнее здесь: https://stackoverflow.com/questions/799 ... a-web-site
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»