рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП рдЬреЗрд╡рд┐рдХреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА


рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди!
рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП рдЬреЗрд╡рд┐рдХреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд╣реЗрдмреНрд░рд╛ рдкрд░ рдПрдХ рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ рдерд╛ред
рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпреЗ рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдереЗ, рдФрд░ рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЬреЗрд╡рд┐рдХреНрд╕ html рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред

рдЬреЗрд╡рд┐рдХреНрд╕ рдкрд░ рдкрд╣рд▓реА рдмрд╛рд░ рд╕реБрдирдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП

Jevix рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рдЬреЛ HTML / XML рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдкрдиреНрди рд╣реИ, рдорд╛рдиреНрдп рдЯреИрдЧ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛрдб рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд XSS рд╣рдорд▓реЛрдВ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред

Php рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓реЗрдЦрдХ, рд╣реИрдмрд░ рдирд┐рд╡рд╛рд╕реА ur001 , рдкреНрд░реЛрдЬреЗрдХреНрдЯ jevix.ru/project рдХрд╛ рд▓рд┐рдВрдХ рд╣реИ


рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕

рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд╕рдВрдж рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рд╕рдордп рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдЕрдЬрдЧрд░ + рдбреАрдЬреЗрдВрдЧреЛ рдХреЛ рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдореИрдВрдиреЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд┐рдпрд╛, рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рд╕рдВрдЪрд░рд┐рдд рдПрдЪрдЯреАрдПрдордПрд▓ рдХреЛрдб рдХреЛ рдХрд╕рдХрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рджреБрд╢реНрдорди рдХреЛ рдХреЛрдИ рдореМрдХрд╛ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП XSS рд╣рдорд▓реЛрдВ рдХрд╛ рдореМрдХрд╛ред

рдпрд╣ рд╕рд┐рд░реНрдл рдкрд░реЗрд╢рд╛рдиреА рд╣реИ, рдореИрдВ рдЕрдЬрдЧрд░ рдпрд╛ рдПрдХ рдпреЛрдЧреНрдп рдПрдирд╛рд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдЬреЗрд╡рд┐рдХреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╣реАрдВ рдвреВрдВрдв рд╕рдХрд╛! рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ jevix + php рд╕реЗ jevix + python рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ

рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдмрддрд╛ рджреВрдВрдЧрд╛ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрдЪреНрдЪреА рд╣реИ рдФрд░ рдмреАрдЯрд╛ рдореЛрдб рдореЗрдВ рд╣реИ, рдХреГрдкрдпрд╛ рд╕рднреА рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╡реЗ рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдЧрдВрджрдЧреА рдХрд╛ рд╕рд╛рдордирд╛ рди рдХрд░реЗрдВред

рдЬреЛ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ

  1. ┬о рдЬреИрд╕реЗ (r) рд╡рд░реНрдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдГ рд╕реБрдзрд╛рд░реЗрдВ
  2. рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рд╕рдВрдХреЗрдд рдЬреЛрдбрд╝реЗрдВ
  3. рдЖрдк br рдХреЛ рдХреБрдЫ рдЯреИрдЧреНрд╕ рдореЗрдВ рдЕрдХреНрд╖рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЬреИрд╕реЗ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ ... рдЗрд╕рд▓рд┐рдП рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рд╣реИ


рдХреИрд╕реЗ рдХрд░реЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓?

рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рдореИрдВрдиреЗ рд╕рдм рдХреБрдЫ рдЫреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЪрд░ рдХрд╛ рдирд╛рдо рднреАред
рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝
from jevix import Jevix p = Jevix() 

рдЕрдиреБрдХреВрд▓рди
 p.cfgAllowTags(['ls','ddcut','a', 'img', 'i', 'p', 'b', 'u', 's', 'video', 'em', 'strong', 'nobr', 'li', 'ol', 'ul', 'sup', 'abbr', 'sub', 'acronym', 'h4', 'h5', 'h6', 'br', 'hr', 'pre', 'code', 'object', 'param', 'embed', 'blockquote', 'iframe','table','th','tr','td']) p.cfgSetTagShort(['br','img', 'hr', 'ddcut','ls']); p.cfgSetTagPreformatted(['pre','code','video', 'iframe']) p.cfgAllowTagParams('img', { 0:'src', 'alt' : '#text', 1:'title', 'align': ['right', 'left', 'center', 'middle'], 'width':'#int', 'height':'#int', 'hspace':'#int', 'vspace':'#int', 'class' : ['image-center', 'image-left', 'image-right'] }) p.cfgAllowTagParams('a', { 0:'title', 1:'href', 'rel' : '#text', 'name' : '#text', 'target' : ['_blank'] }) p.cfgAllowTagParams('ddcut', { 0:'name', }) p.cfgAllowTagParams('acronym', { 0:'title', }) p.cfgAllowTagParams('abbr', { 0:'title', }) p.cfgAllowTagParams('param', { 'width' : '#int', 'height' : '#int', 'src' : {'#domain':['youtube.com','rutube.ru','vimeo.com']} }) p.cfgAllowTagParams('iframe', { 'name' : '#text', 'value' : '#text', 'height' : '#int', 'width' : '#int', 'src' : {'#domain':['youtube.com','rutube.ru','vimeo.com','video.yandex.ru']}, }) p.cfgAllowTagParams('ls', { 'user' : '#text' }) p.cfgAllowTagParams('td', { 'colspan':'#int','rowspan':'#int','align':['right', 'left', 'center', 'justify'], 'height':'#int','width':'#int' }) p.cfgAllowTagParams('table', { 'border':'#int', 'cellpadding':'#int','cellspacing':'#int','align':['right', 'left', 'center'], 'height':'#int','width':'#int' }) p.cfgAllowTagParams('embed', { 'src' : {'#domain':['youtube.com','rutube.ru','vimeo.com','video.yandex.ru']}, 'type' : '#text', 'allowscriptaccess' : '#text', 'allowfullscreen' : '#text','width' : '#int', 'height' : '#int', 'flashvars': '#text', 'wmode': '#text' }) p.cfgAllowTagParams('object', { 'width' : '#int', 'height' : '#int', 'data' : {'#domain':['youtube.com','rutube.ru','vimeo.com','video.yandex.ru']}, }) p.cfgSetTagParamsRequired('img', ['src']) p.cfgSetTagParamsRequired('a', ['href']) p.cfgSetTagParamsRequired('iframe', ['src']) p.cfgSetTagCutWithContent(['script', 'style']) p.cfgSetTagChilds('ul', ['li'], False, True) p.cfgSetTagChilds('ol', ['li'], False, True) p.cfgSetTagChilds('object', ['param'], False, True) p.cfgSetTagChilds('object', ['embed'], False, False) p.cfgSetTagChilds('table', ['tr'], False, True) p.cfgSetTagChilds('tr', ['td','th'], False, True) p.cfgSetTagIsEmpty(['param','embed','a','iframe']); p.cfgSetTagNoAutoBr(['ul','ol','object','table','tr']) p.cfgSetTagBlockType(['h4','h5','h6','ol','ul','blockquote','pre','table','iframe', 'object']) p.cfgSetAutoBrMode(True) p.cfgSetTagNoTypography(['code','video','object', 'iframe']) errors = [] text= u"""<iframe width="560" height="315" src="http://youtube.com/embed/lGnGQXUeaVc" frameborder="0" allowfullscreen></iframe>""" 


рдЦреИрд░, рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВ
 text, errors = p.parse(text) print text, errors 


рд╕рдВрджрд░реНрдн:
рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП - jevix.ru
рдСрдирд▓рд╛рдЗрди рдЕрдЬрдЧрд░ + рдЬреЗрд╡рд┐рдХреНрд╕ - jevix.vir-mir.ru рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
github рдкреНрд░реЛрдЬреЗрдХреНрдЯ - github.com/vir-mir/jevix

Source: https://habr.com/ru/post/In168439/


All Articles