Zdravim,
pisu univerzalni forum, ktery muzou pouzivat webmasteri a chtel bych jim umoznit, aby si mohli poslat svuj CSS soubor a mohli si tak zmenit vzhled podle vzhledu jejich www.
Ted me ale napadlo ze to nemusi byt bezpecne, ze by si tam treba nekdo mohl poslat misto css nejakej zaskodnickej skript a nabourat se na server. Jak bych to mohl ochranit?
jak se bude to css ukladat?
no ja sem si myslel ze by ho mohl uploadnout, eventuelně zkopirovat do nejakyho formulare...
takze ulozit jako file?
jestli jo, tak dej bacha na jmeno souboru, co kdyby 'nahodou' obsahovalo dejme tomu dve tecky, ze :-)
jak se k tomu css bude pritupovat? jestlipres php include(), tak je to doura jak prase, radsi readfile()
myslel jsem pres:
<link rel="STYLESHEET" type="text/css" href="$nazevsouboru">
co byste rikali na tohle
$obsahsouboru = StrReplace("<?","<? exitl; ?>",$obsahsouboru);
pak kdyby nekdo poslal css soubor s php skriptem treba takto:
body {color: black;}
<?
zaskodnickej skript
?>
opravilo by se to na tohle:
body {color: black;}
<?
exit;
?>
zaskodnickej skript
?>
nechci kecat, nezkousel sem to, ale myslim ze ne .. php ti to vrati jako uz zpracovany text a ne jako script .. lepsi by bylo dat podminku
if (preg_match("<?"),$text) { exit; }
a nebo rovnou nahradit tagy <? ?> i to co je mezi nima za nic:
$text = preg_replace ("<? .* ?>", "", $text);
btw. jestli mas php manual koukni se na regularni vyrazy je tam docela dobrej script kterej se stara o bezpecnost textu
sorry u preg_replace musis ("/<? .*?>/","",$text)
ulozeni:
1) autorizace - jmeno & heslo...
2) vezmu jmeno souboru na klientovi ($_FILES[...]['name']), nahradim '..' podtrzitkem, stejne jako dalsi divny znaky (asi bych nechal jenom 'a-zA-Z0-9', '-', '_' a '.', urcite bych tam nenechaval lomitka ;-))
3) obsah souboru: nahradim '<?' za '<\?'
4) jestli k tomu souboru chci pristupovat pres <link rel='stylesheet' ... />, tak mu natvrdo pridam koncovku '.css'
5) ulozim do adresare './user-css' nebo neco takovyho
vlozeni do stranky:
echo "<link rel='stylesheet' type='text/css' href='user-css/$filename' />";
samozrejme ze by to $filename nemelo bejt zadavatelny uzivatelem, ale radsi nejak takhle:
mam prehled uzivatelu (treba databaze, to je jedno), vedle uname je v nem polozka css, kterou modifikuju pri ukladani css (@see bod #5), takze je uz checknuta