Autor | Zpráva | ||
---|---|---|---|
Jack Finger Profil |
#1 · Zasláno: 16. 1. 2008, 16:15:24
Dobrý den,
tvořím ochranu proti útokům přes XSS a nemůžu přijít na to, jak udělat následující regulár: $text = '<h1>test</h1>'; function replaceString($text){ $from = "/<(\/)(.+){1,}>/i"; $to = "<\\1\\2>\\3</\\2>"; $return = preg_replace($from, $to, $text); return $return; } echo replaceString($text); tento příkald vypíše: <h1></h1></h1> a má vypsat: <h1>test</h1> taktéž by měl fungovat, když nebude obsahovat slovo "test". Mohl by mi prosím někdo pomoci? Děkuji, Jack F. |
||
Joker Profil |
#2 · Zasláno: 16. 1. 2008, 16:25:06
Co použít raději htmlspecialchars()?
|
||
Jack Finger Profil |
#3 · Zasláno: 16. 1. 2008, 16:29:22
zkoušel jsem, ale to mi udělalo z uvozovek " a to nepotřebuju..
|
||
Joker Profil |
#4 · Zasláno: 16. 1. 2008, 16:33:48
Tak co htmlspecialchars plus ENT_NOQUOTES?
(viz manuál) |
||
Str4wberry Profil |
#5 · Zasláno: 16. 1. 2008, 16:36:29 · Upravil/a: Str4wberry
Odpovídám Jacku Fingerovi:
Tohle jsi četl: http://php.vrana.cz/cross-site-scripting.php? |
||
Jack Finger Profil |
#6 · Zasláno: 16. 1. 2008, 16:43:34
Joker
a když nechci přepisovat '&' ? Str4wberry pokud nejsem slepý, tak je tam jen o XSS a jak se bránit, ale to neřeší můj problém...? |
||
Joker Profil |
#7 · Zasláno: 16. 1. 2008, 17:16:02
Jack Finger
a když nechci přepisovat '&' ? :o))) Příští bude: "A když nechci přepisovat ani '>'?" :-D V tom případě bych použil strtr. |
||
Jack Finger Profil |
#8 · Zasláno: 16. 1. 2008, 17:24:48
Příští bude: "A když nechci přepisovat ani '>'?" :-D
to ne ;o) jde mi jen o ochranu před XSS, tzn '<' a '>', znak '&' mi nijak web neohrozí. když použiju strtr(), tak (příklad z manuálu) by to bylo: $trans = array("ahoj" => "nazdar", "nazdar" => "ahoj"); echo strtr("nazdar lidi, řekl jsem ahoj", $trans); ale to mi přepíše jen '<' a '>', ale co když uživatel napíše třeba řetězec 'udělal jsem to a to => dostal jsem na vysvědčení 1', pak se to přepíše taky a to já právě nepotřebuji, proto to řeším regulárem. |
||
Joker Profil |
#9 · Zasláno: 16. 1. 2008, 17:35:47
Jack Finger
Tak strip_tags? :-) Mno, já jsem toho názoru, že když už to dělám, dělal bych to pořádně, ne "tak napůl". Standardní úprava textu do "korektního tvaru" pro vložení do HTML/XML je převést všechny výskyty tří znaků: <, >, & |
||
Jack Finger Profil |
#10 · Zasláno: 16. 1. 2008, 17:43:13 · Upravil/a: Jack Finger
Joker
však právě pořádně to dělám, napůl by to bylo, kdybych převedl všechny tři a tudíž uživatel by neměl možnost psát znaky typu '=>','<=>','company & spol' apod... strip_tags() umí smazat znak '<', znak '>' smaže jen pokud je do páru s '<'. ale já je nechci smazat, ale nahradit :oP |
||
Jack Finger Profil |
#11 · Zasláno: 16. 1. 2008, 18:23:07
Prostě mi stačí, kdyby mi někdo pomohl opravit můj původní regulár tak, aby fungoval. Důvody proč to tak dělám mám a o žádném jiném řešení nevím..
|
||
Chamurappi Profil |
#12 · Zasláno: 16. 1. 2008, 18:33:58 · Upravil/a: Chamurappi
Reaguji na Jacka Fingera:
V tom případě by mělo stačit nahrazování "/<([\\/\\?!]?[a-z])/i" za "<\\1". Edit: zapomněl jsem ještě na ukončovací značku a podobné věci. Snad jsem to správně vyescapoval. |
||
DJ Miky Profil |
#13 · Zasláno: 16. 1. 2008, 18:36:03 · Upravil/a: DJ Miky
Je snad nějaký rozdíl, když by uživatel napsal <h1></h1> nebo a<b? Obojí by dělalo neplechu.
$trans = array("<" => "<", ">" => ">"); echo strtr("<h1> a<b<c <=> c>b>a </h1>", $trans); To text ošetří, aby to znaky < a > bralo jako text (entity) a ne jako značky. |
||
Jack Finger Profil |
#14 · Zasláno: 16. 1. 2008, 18:47:58
Chamurappi
vypadá, že funguje jak má :o) DJ Miky Je snad nějaký rozdíl, když by uživatel napsal <h1></h1> nebo a<b? ano, je. <h1></h1> by se dalo považovat za XSS, a<b za nerovnici, o možnost XSS by šlo v případě a<b>. teď mě ale napadá, že buďto jsem zapomněl původní důvod, nebo mě teď nedošlo, že výsledek je stejný :oP v každém případě díky, už to funguje a kdyby mě napadlo, proč jsem to chtěl zrovna regulárem, tak napíšu. lol.. degenerace mozku... |
||
Joker Profil |
#15 · Zasláno: 16. 1. 2008, 18:58:17
Jack Finger
ano, je. <h1></h1> by se dalo považovat za XSS, a<b za nerovnici, o možnost XSS by šlo v případě a<b>. A mohl byste mě poučit, jaký je rozdíl v dopadech? Řekněme, že pošlu: Lorem ipsum dolor <h1>sit amet consectetuer</h1> ut at urna sollicitudin eget. a výsledkem bude (náznakově): Lorem ipsum dolor sit amet consectetuer ut at urna sollicitudin eget. A řekněme, že pošlu: Lorem ipsum dolor sit amet, a<b, consectetuer ut at urna sollicitudin eget. a výsledkem bude: Lorem ipsum dolor sit amet, a Myslíte, že to druhé je "méně špatně"? |
||
Jack Finger Profil |
#16 · Zasláno: 16. 1. 2008, 18:58:30
aha, už vím proč jsem to chtěl: když mám '->', tak v db mám sice '->' , ale na výstupu se mi zobrazí '-&gt;'. nevím proč, každopádně Chamurappiho regulár funguje ok. díky.
|
||
Jack Finger Profil |
#17 · Zasláno: 16. 1. 2008, 19:01:05
Joker
no dobře, zase dřív mluvím než zkouším. ach jo, co je to dneska za den, už radši mlčím. |
||
Joker Profil |
#18 · Zasláno: 16. 1. 2008, 19:03:48
Chamurappi
Myslím, že ten výraz by šel "hacknout" nějak takhle: <<script src="zlyskript.js"> |
||
Chamurappi Profil |
#19 · Zasláno: 16. 1. 2008, 19:55:44
Reaguji na Jokera:
Mělo by vzniknout tohle: <<script src="zlyskript.js"> — a to je OK, ne? |
||
Joker Profil |
#20 · Zasláno: 16. 1. 2008, 20:23:15
Chamurappi
Jo, to je pravda, ono se vlastně nahradí to druhé < ...tak nic :) |
||
Časová prodleva: 16 let
|
0