ilpostino Skrevet 23. juni 2010 Del Skrevet 23. juni 2010 (endret) jeg skal ha et enkelt CMS på hjemmesiden min hvor jeg skal ha dette designet på databasen, iallefall på de tabellene jeg skal lage selv. jeg har tenkt på følgende innhold: Den delen som redigerer inholdet skal ha følgende funksjoner: - redigere alle artikler. - lage nye artikler/sider - slette sider/artikler - lage nye sider/artikler - mulighet for å publisere/linke til en side på FB. Den delen hvor en kan laste opp inhold skal ha følgende funksjonalitet: - laste opp filer (det skal være begrnsninger på hva slags filer, størrelse osv). - mulighet for å slette eksisterende filer. Brukeradministrasjon - to typer roller - en for å redigere inhold og en "gjestebruker" som har tilgang til begrenset innhold. - meldinger/mail til andre brukere - todo-lists Sessions - hele innloggingssiden skal styres med sessions for å hindre uautorisert adgang. noen tips for å hindre hijacking? jeg skal ikek ha mulighet for en bloggefunksjon, iallefall ikke enda. jeg skal heller ikke ha mulighet for å legge inn kommentarer på de forskjellige sidene. er det noen som ser noe funksjonalitet som jeg burde ha tatt med? Endret 23. juni 2010 av ilpostino Lenke til kommentar
oransjeFugl Skrevet 23. juni 2010 Del Skrevet 23. juni 2010 Du hindrer highjacking(csrf), ved å bruke engangstokens i alle skjemaer. Men da må du sørge for at ingen javascript(xss) kan inkluderes i htmlkoden, ellers er tokens nyttesløst. http://query7.com/preventing-csrf-in-php Lenke til kommentar
slacky Skrevet 26. juni 2010 Del Skrevet 26. juni 2010 (endret) Sikkerhet er viktig. Som han over nevner så er det smart å unngå xss angrep, så det som da kan gjøres er at hvær enkelt side bruker "require_once" mot en core fil. Diverse smarte ting å få med, i en core fil.. // Unngå mulige XSS angrep via $_GET. foreach ($_GET as $check_url) { if ((eregi("<[^>]*script*\"?[^>]*>", $check_url)) || (eregi("<[^>]*object*\"?[^>]*>", $check_url)) || (eregi("<[^>]*iframe*\"?[^>]*>", $check_url)) || (eregi("<[^>]*applet*\"?[^>]*>", $check_url)) || (eregi("<[^>]*meta*\"?[^>]*>", $check_url)) || (eregi("<[^>]*style*\"?[^>]*>", $check_url)) || (eregi("<[^>]*form*\"?[^>]*>", $check_url)) || (eregi("\([^>]*\"?[^)]*\)", $check_url)) || (eregi("\"", $check_url))) { die (); } } unset($check_url); //~Ren url~ function cleanurl($url) { $bad_entities = array("&", "\"", "'", '\"', "\'", "<", ">", "(", ")", "*"); $safe_entities = array("&", "", "", "", "", "", "", "", "", ""); $url = str_replace($bad_entities, $safe_entities, $url); return $url; } function trimlink($text, $length) { $dec = array("\"", "'", "\\", '\"', "\'", "<", ">"); $enc = array(""", "'", "\", """, "'", "<", ">"); $text = str_replace($enc, $dec, $text); if (strlen($text) > $length) $text = substr($text, 0, ($length-3)).".."; $text = str_replace($dec, $enc, $text); return $text; } Så, vil jeg annbefale å ha et simpelt gallerisystem med i den lille CMSen. Og muligheter bbkoder, om du ikke planlegger å bruke noe annet, tinymce o.l.. Om du velger å ha et galleriskript, så er denne smart: // Skanne bilder for onnskapsfulle koder! function verify_image($file) { $txt = file_get_contents($file); $image_safe = true; if (preg_match('#&(quot|lt|gt|nbsp);#i', $txt)) { $image_safe = false; } elseif (preg_match("#&\#x([0-9a-f]+);#i", $txt)) { $image_safe = false; } elseif (preg_match('#&\#([0-9]+);#i', $txt)) { $image_safe = false; } elseif (preg_match("#([a-z]*)=([\`\'\"]*)script:#iU", $txt)) { $image_safe = false; } elseif (preg_match("#([a-z]*)=([\`\'\"]*)javascript:#iU", $txt)) { $image_safe = false; } elseif (preg_match("#([a-z]*)=([\'\"]*)vbscript:#iU", $txt)) { $image_safe = false; } elseif (preg_match("#(<[^>]+)style=([\`\'\"]*).*expression\([^>]*>#iU", $txt)) { $image_safe = false; } elseif (preg_match("#(<[^>]+)style=([\`\'\"]*).*behaviour\([^>]*>#iU", $txt)) { $image_safe = false; } elseif (preg_match("#</*(applet|link|style|script|iframe|frame|frameset)[^>]*>#i", $txt)) { $image_safe = false; } return $image_safe; } Diverse bbkoder..: function bbcode($text) { $text = preg_replace('#\[b\](.*?)\[/b\]#si', '<b>\1</b>', $text); $text = preg_replace('#\[i\](.*?)\[/i\]#si', '<i>\1</i>', $text); $text = preg_replace('#\[u\](.*?)\[/u\]#si', '<u>\1</u>', $text); $text = preg_replace('#\[center\](.*?)\[/center\]#si', '<center>\1</center>', $text); $text = preg_replace('#\[url\]([\r\n]*)(http://|ftp://|https://|ftps://)([^\s\'\";\+]*?)([\r\n]*)\[/url\]#si', '<a href=\'\2\3\' target=\'_blank\'>\2\3</a>', $text); $text = preg_replace('#\[url\]([\r\n]*)([^\s\'\";\+]*?)([\r\n]*)\[/url\]#si', '<a href=\'http://\2\' target=\'_blank\'>\2</a>', $text); $text = preg_replace('#\[url=([\r\n]*)(http://|ftp://|https://|ftps://)([^\s\'\";\+]*?)\](.*?)([\r\n]*)\[/url\]#si', '<a href=\'\2\3\' target=\'_blank\'>\4</a>', $text); $text = preg_replace('#\[url=([\r\n]*)([^\s\'\";\+]*?)\](.*?)([\r\n]*)\[/url\]#si', '<a href=\'http://\2\' target=\'_blank\'>\3</a>', $text); $text = preg_replace('#\[mail\]([\r\n]*)([^\s\'\";:\+]*?)([\r\n]*)\[/mail\]#si', '<a href=\'mailto:\2\'>\2</a>', $text); $text = preg_replace('#\[mail=([\r\n]*)([^\s\'\";:\+]*?)\](.*?)([\r\n]*)\[/mail\]#si', '<a href=\'mailto:\2\'>\3</a>', $text); $text = preg_replace('#\[small\](.*?)\[/small\]#si', '<span class=\'small\'>\1</span>', $text); $text = preg_replace('#\[color=([a-zA-Z]*|\#?[0-9a-fA-F]{6})](.*?)\[/color\]#si', '<span style=\'color:\1\'>\2</span>', $text); $text = preg_replace('#\[size=([2-7]{1})](.*?)\[/size\]#si', '<font size=\'\1\'>\2</font>', $text); $text = preg_replace('#\[flash width=([0-9]*?) height=([0-9]*?)\]([^\s\'\";:\+]*?)(\.swf)\[/flash\]#si', '<object classid=\'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\' codebase=\'http://active.macromedia.com/flash6/cabs/swflash.cab#version=6,0,0,0\' id=\'\3\4\' width=\'\1\' height=\'\2\'><param name=movie value=\'\3\4\'><param name=\'quality\' value=\'high\'><param name=\'bgcolor\' value=\'#ffffff\'><embed src=\'\3\4\' quality=\'high\' bgcolor=\'#ffffff\' width=\'\1\' height=\'\2\' type=\'application/x-shockwave-flash\' pluginspage=\'http://www.macromedia.com/go/getflashplayer\'></embed></object>', $text); $text = preg_replace("#\[img\]((http|ftp|https|ftps)://)(.*?)(\.(jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/img\]#sie","'<img src=\'\\1'.str_replace(array('.php','?','&','='),'','\\3').'\\4\' style=\'border:0px\'>'",$text); $qcount = substr_count($text, "[quote]"); $ccount = substr_count($text, "[code]"); for ($i=0;$i < $qcount;$i++) $text = preg_replace('#\[quote\](.*?)\[/quote\]#si', '<div class=\'quote\'>\1</div>', $text); for ($i=0;$i < $ccount;$i++) $text = preg_replace('#\[code\](.*?)\[/code\]#si', '<div class=\'quote\' style=\'width:440px;white-space:nowrap;overflow:auto\'><code style=\'white-space:nowrap\'>\1<br><br><br></code></div>', $text); $text = descript($text,false); return $text; } Brukernavnet som er lagret i cookien til brukeren, er tilsvarende den fra databasetabellen, så jeg valgte å lage et slikt skript i min core fil. //Lager en fuksjon for å fetche brukerinfo fra DB session_start(); require_once "var.php"; $select_user = "SELECT * FROM `users` WHERE username='$_SESSION[username]'"; $user = mysql_query($select_user); $udata = mysql_fetch_array($user); // DENNE delen er bare eks på admin versus ikke admin define("iGUEST",$udata['user_rank'] == 0 ? 1 : 0); define("iUSER", $udata['user_rank'] >= 101 ? 1 : 0); define("iBOSS", $udata['user_rank'] >= 102 ? 1 : 0); Kaster meg nå, håper dette var til noe hjelp.. Hater selv å starte fra scratch uten hjelp når det må til (: Men, noe sier meg at du gjerne kan dette selv. Men, eyyyYyYY! Nå har jeg gjort det for deg Endret 26. juni 2010 av slacky Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå