Kod för administrationssidor eller annat "privat"?

Permalänk
Medlem

Kod för administrationssidor eller annat "privat"?

Hur gör ni när ni bygger websidor med admin-gränssnitt? Jag menar, det kan ju behövas javascript, css-klasser med mera på ställen där man inloggad med en användare. Man vill kanske inte avslöja för mycket "privata" saker i koden som t.ex:

<script type="text/javascript" src="./js/admin_menu.js"></script> i headern eller vad vad det nu kan vara.

Hur gör ni när ni koder hemsidor? "Gömmer" ni sådant som egentligen inte "ska" visas till en användare som inte är inloggad?

/C

Permalänk
Medlem

Vid inloggningen kan du tex sätta:

$_SESSION['admin_login'] = 'true';

Varpå du kollar vilken typ av js som ska hämtas in:

if($_SESSION['admin_login'] == 'true'){ echo '<script type="text/javascript" src="./js/admin_menu.js"></script>'; }else{ echo '<script type="text/javascript" src="./js/public_menu.js"></script>'; }

Du skulle även kunna lägga de känsligare admindelarna i en mapp som är svår att gissa sig till.

Ett annat alternativ kan vara att baka in javascript i php och använda samma metod som ovan.

Jag önskar jag var mer insatt i php och säkerhet, men fler får fylla på.

Visa signatur

i7 920 | 12GB DDR3 | GTX 480 | GA-X58A-UD7 | 160GB SSD X25-M G2 | 1TB F3 HD103SJ | W7 64-bit | Mac Mini
Webb: bluekitestudios.com

Permalänk
Medlem

Ja. Jag kom precis på att man med hjälp av .htaccess kan göra det omöjligt för en användare att öppna eventuella javascript eller css-filer, eller hur?

Permalänk
Medlem

Nej det kan du inte. De måste laddas ner för att ha effekt på hemsidan man besöker, precis som bild och ljud.
edit: visst, du kan lägga till en Allow-/Deny-klausul i din .htaccess-fil för att förhindra tillträde till dina CSS- och JS-filer, men varför skulle du vilja göra det? Det är som att ha öppen konstutställning och hänga svarta skynken över tavlorna..

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

I vår databashanteringskurs på gymnasiet så satte vi att om man loggade in fick man en cookiesession, och om man hade administratörsrättigheter fick man ytterligare en cookiesession.

Hade man båda cookisarna så fick man se administratörsvyn. Vi hade enkla if-satser för att genomföra detta i php.

Vet inte om det är världens säkraste sätt kanske, men det fungerade utmärkt.

Visa signatur

» AMD Ryzen 5 2600X » 16 Gb DDR4 » ASUS GTX 1060 6 Gb OC » 1 Tb M.2 PCIe NVME
Fraktfritt från Inet för Sweclockersmedlemmar
Vänligen citera om du pratar med mig

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Zlayphir
I vår databashanteringskurs på gymnasiet så satte vi att om man loggade in fick man en cookiesession, och om man hade administratörsrättigheter fick man ytterligare en cookiesession.

Hade man båda cookisarna så fick man se administratörsvyn. Vi hade enkla if-satser för att genomföra detta i php.

Vet inte om det är världens säkraste sätt kanske, men det fungerade utmärkt.

Själva inloggningsprocessen har jag fixat. Kollar mot en $_SESSION['admin']. Om den är 'true' så är man inloggad. Jag vill bara inte avslöja massa design och javascript för användare som inte är inloggad.

Det är heller inget avancerat, den har bara en användare och det är för ett CMS-liknande system, fast ganska förenklat.

Men som tidigare sagts så kan jag i min <head> kolla om den sessionen finns, om den gör det kan jag inkludera de JS/css-grejer som behövs.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Teknocide
Nej det kan du inte. De måste laddas ner för att ha effekt på hemsidan man besöker, precis som bild och ljud.
edit: visst, du kan lägga till en Allow-/Deny-klausul i din .htaccess-fil för att förhindra tillträde till dina CSS- och JS-filer, men varför skulle du vilja göra det? Det är som att ha öppen konstutställning och hänga svarta skynken över tavlorna..

Tror du missuppfattade, ingen som påstått att trådskaparen skulle dölja något annat än det som har med admin grejerna att göra!

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Teknocide
Nej det kan du inte. De måste laddas ner för att ha effekt på hemsidan man besöker, precis som bild och ljud.
edit: visst, du kan lägga till en Allow-/Deny-klausul i din .htaccess-fil för att förhindra tillträde till dina CSS- och JS-filer, men varför skulle du vilja göra det? Det är som att ha öppen konstutställning och hänga svarta skynken över tavlorna..

Nja... Det finns inga "spekulanter" på ett stängt och låst galleri. Tavlorna kan få hänga framme utan skynke men endast dom som har nyckeln till gallerit kan se dom.

Flummigt

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av kismo
Nja... Det finns inga "spekulanter" på ett stängt och låst galleri. Tavlorna kan få hänga framme utan skynke men endast dom som har nyckeln till gallerit kan se dom.

Flummigt

Då är jag med halvt om halvt
Som jag förstår det vill du förhindra att någon laddar ner admin.css, även om han vet var filen ligger, om personen inte är inloggad som admin. Jag är inte heller direkt insatt i säkerhet men en sak som jag vet skulle fungera är om du inkluderar filerna inline i PHP (<?php include('admin.css');?> menar jag alltså). I samma mapp som dina skyddade filer har du en .htaccess-fil med raderna:

<FilesMatch \.(?i:css|js)$>
Order allow,deny
Deny from all
</FilesMatch>

Jag vet dock inte om det fungerar i praktiken. Prova gärna!

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Du kan också skydda dina javascript filer och css filer genom PHP. Genom att använda PHP-kod i filen, t.ex:

<script type="text/javascript" src="myscript.php"></script>

och sedan köra din koll med $_SESSION['admin'] i myscript.php. PHP behöver inte returnera html utan kan ruternera filer, bilder, css, javascript o.s.v.

Visa signatur

citera!

Permalänk
Medlem

Så jag skulle alltså kunna köra ?:

Global funktion som jag har i min functions.php

<?php function logged_in() { if($_SESSION['admin'] == 'true') return true; else return false; } ?>

Köra i <head>

<?php if(logged_in()) { >?<script type="text/javascript" src="myscript.php"></script><?php } ?>

myscript.php

<?php if(!logged_in()) { header("Location: index.php"); } ?> // Massa javascript här Eller måste jag ha allt JS här inom <script>? Verkar ologiskt eftersom jag redan använt det i headern?

Permalänk
Medlem
Skrivet av kismo:

Så jag skulle alltså kunna köra ?:

Global funktion som jag har i min functions.php

<?php function logged_in() { if($_SESSION['admin'] == 'true') return true; else return false; } ?>

Köra i <head>

<?php if(logged_in()) { >?<script type="text/javascript" src="myscript.php"></script><?php } ?>

myscript.php

<?php if(!logged_in()) { header("Location: index.php"); } ?> // Massa javascript här Eller måste jag ha allt JS här inom <script>? Verkar ologiskt eftersom jag redan använt det i headern?

jag skulle ha gjort såhär:

<?php if (logged_in()) { ?> function foo() { ... // kod } <?php } ?>

Med andra ord, om du är inloggad får du script-data, annars får du ingenting.

edit: ändrade exemplet för att visa script

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av kismo:

Så jag skulle alltså kunna köra ?:

Global funktion som jag har i min functions.php

<?php function logged_in() { if($_SESSION['admin'] == 'true') return true; else return false; } ?>

Köra i <head>

<?php if(logged_in()) { >?<script type="text/javascript" src="myscript.php"></script><?php } ?>

myscript.php

<?php if(!logged_in()) { header("Location: index.php"); } ?> // Massa javascript här Eller måste jag ha allt JS här inom <script>? Verkar ologiskt eftersom jag redan använt det i headern?

borde man inte kunna ha

if($_SESSION['admin']) { }

så slipper man ett call för en funktion logged_in() som egentligen inte gör så mycket? har för mig det ska fungera, egentligen minor detail

Visa signatur

Laptop - MacBook 2.0GHz, 4GB ram, Intel GMA 950
Stationär - i5 3570k @ 4ghz, 8gb ram, 120gb ssd + 2tb hdd, Windows 8 64bit, fractal design arc
Citera så jag hittar tillbaka :)

Permalänk
Medlem

Ok. Ja alltså hur funktionen är spelar inte så stor roll. Jag är mer intresserad av min fråga om hur "myscript.php" (som exemplet ovan säger) fungerar.

Permalänk
Medlem

Finns många sätt, men detta är ju ett sätt

javascript.php

<?PHP session_start(); if($_SESSION['admin'] == 'true') require_once('./admin.js'); else require_once('./default.js'); ?>

Sen i samma mapp har du admin.js och default.js. Samma sak kan göras med CSS.

Allt som därefter behövs på din sida är

<script type="text/javascript" src="javascript.php"></script>

Permalänk
Medlem

Bara en liten reflektion här, koden som skyddar så att vissa inte kan genomföra admin åtgärder ska inte ligga i kollen om man får hämta ett javascript eller inte utan ska ligga där åtgärden genomförs, dvs det är inte farligt om någon får se edit gränssnittet för en sida så länge det inte händer något när man trycker på spara knappen.
Och självklart ska man ha kod på båda ställena, dvs både när man hämtar filen/sidan och när man genomför åtgärden men jag vill bara belysa vad som är viktigast.

/Viktor

Permalänk
Medlem

Jag håller med vg132.

Nu kommer jag inte riktigt ihåg hur phps olika session-saker ser ut, men något liknande:
Kolla om användaren utger sig för att vara admin ( $_SESSION["admin"] == true ?), om nej, visa vanliga sidan.
Om ja, kolla om det är samma header som skickas (samma webbläsare och samma version av webbläsre), (ex. $_SESSION["head"] == md5($_SERVER["HTTP_REMOTE_ADDR"])?).
Förnya session-id, tror det är session_renew_id() eller något sånt i php.

Jag har för mig detta räcker, för om jag inte har fel så sparas bara session-idt i besökarens läsare och själva session-informationen lagras på serversidan? Annars kan man lägga till någon egen märklig nyckel för att göra allt lite svårare.

Kollar du detta varje gång innan sidor laddas så vet du om anvndaren är admin och om denne ska få göra ändringar på sidan. Allt i php så det spelar ingen roll alls om ingen eller hela världen vet hur dina javascript ser ut.

Visa signatur

Cat funeral! Cat funeral!
>>> 112383 <<<

Permalänk

Som sagt innan kommer du behöva ett inloggnings script skrivet i t.ex. php. När du har det och kan checka så att användaren är admin och om den är det så kan du använda ett template system för att visa sidan, antingen genom att göra själv eller använda vanligt. På detta sättet kan du denya all access till html/js/css,osv. Template systemet använde filegetcontents för att hämta data från filen men det är jobbigare med bilder och liknande det lättaste där är att du gör ett script för den saken som kollar användaren och kör filegetcontents på filen för att hämta den från den "låsta" mappen. Personligen är jag inte mycket för att gömma html, css och bilder från användaren men kan säga att jag själv använder liknande system för bilder men utav en annan anledning, jag har nämligen ett thumbnail script som kallas på när vissa bilder ska visas, detta p.g.a. att webbläsarens nerskalning oftast är dålig och ful samt för att spara bandbredd för användare och server. Det scriptet genererar en thumbnail med bra kvalitet första gången det kallas och sedan streamar det till webbläsaren och när det kallas i fortsättningen efter det så hämtar den thumbnailen som skapades första gången och streamar till browsern men det bygger fortfarande på lite samma teknik. Ett annat bra exempel är många filuppladdningssidor med restriktioner på hur mycket och under vilken tid en fil får laddas ner där används också oftast samma teknik. Om du inte förstår så kan du läsa upp på http://php.net/manual/en/function.file-get-contents.php men det är väldigt simpelt och enkelt.

Visa signatur

[i7 2600k @ 5GHz| NH-D14, fläktar utbyta mot ljudlösa 120mm SySS 800| Asus P8P67| HD6870 DirectCU| Corsair 4x8GB (32GB) 1600MHz DDR3| Moddat Corsair 550VX | Mac Pro / G5 Chassi| 2x120GB raid0 Intel 520 sys+ 2x3TB slask & home (riktig lagring på 12TB ZRAID NAS som även home backuppas/rsyncas till) ] - Helt ljudlös om man inte lägger örat intill chassit
[ MacBook Pro Retina 13 | 16GB ram | 256GB PCIe SSD | OS X(main), Arch ]