![]() |
Hej gott folk!
Har en stor fråga: Jag hade planerat att starta en rewardsite och vill ha en hög säkerhet i filerna, Hur ska jag skydda filerna från hackers eller liknande (tex sQl-injections) Ngt mer än sql-injections? Tacksam för svar! MvH //Philip Andersson! |
Kontrollera all indata, se till så att användaren inte kan komma åt dina "core" filer direkt i webbläsaren. Exempel, placera följande högst upp i varje fil..
Kod:
if(!defined('OK')) die(); Lite mer: http://www.sitepoint.com/article/php-secur...urity-blunders/ |
addslashes();
htmlspecialchars(); Där har du några funktioner du bör ha koll på. |
Kod:
function secure($value) { if ($value) { return mysql_real_escape_string($value); } else return false; } |
Tack för dessa svaren!
Ska hålla god koll på dem! |
Jag tycker det är vettigt att kolla ALL indata. Ska ett id anropas med hjälp av $_GET? Kör då en enkel koll att värdet verkligen är numeriskt etc.
Kod:
if (isset($_GET['variabel'])){ Kod:
// En funktion att anvndas nr magic_quotes_gpc inte r satt. Fr att frhindra SQL-injections, eller i lidrigare fall MySQl-fel. Kod:
$_POST = db_escape($_POST); |
Använd PDO för databas frågor, då blir det enklare att göra säkra frågor, du slipper addslashes motsvarande tex..utan använder prepared statements (eller vad det heter )
Fånga upp alla fel med set_error_handler() och visa en felsida då fel uppstår..hackers kan använda genererade fel för att få mer information om systemet Logga felen i en fil som ligger utanför webbkatalogen. Om du inte kan spara loggen utanför webbmappen, så kan man skriva in <?php exit; ?> för varje fel , då kan man inte surfa in till felloggen, se nedan för exempel.. Kod:
function error_handler ($type, $message, $file=__FILE__, $line=__LINE__) { Ha koll på Cross site scripting, XSS.. Använd inte <form action="<?php print $_SERVER['PHP_SELF']?>">, vilket öppnar för XSS attacker tex... Ha koll på konfig filen med lösenord, så att den ej heter config..inc eller liknande utan .php , och gärna att den ligger utanför webbkatalogen |
SQL - injections är ju ganska klassiskt. Men det finns ju en del fler hål i att komma in igenom, t.ex. $_SERVER['PHP_SELF']; Med lite intelligenta URLS som man matar in så kan man få till vacker XSS.
MD5 är bra om någon annan kommer över din databas. NOT! Finns rainbowtables för det.. Men om du hittar på någon skum funktion typ md5(strreverse(md5($password))) så tar det lite längre tid att leta på vad det nu är för lösenord m.h.a. rainbow tables.. Eller om du använder blowfish och något bra salt. Att inkludera filer m.h.a. $_GET är också väldigt dumt. |
Man kan också lägga till en liten sökning på hela querysträngen, om den innehåller några fulingar som försök till sql-injections (or 1=1 t.ex) eller om den innehåller en adress (http|ftp) m.m. Om det hittas något så bara skicka iväg personen :P
Man kan enklast kolla sånt med ett reguljärt uttryck smidigast.. Ang lösenord så bör du spara det med kryptering plus ett salt.. =) Strippa också all indata på html.. om du behöver formattering så kör med bbcode istället. |
danjel > PDO är bra om man vill stödja flera olika databaser, tex. MySQL, MSSQL, Oracle mfl. Använder man bara MySQL och man har tillgång till PHP5 & MySQL 4.1 eller senare så är MySQLi ett starkt alternativ.
|
OK har knappt hört talas om MySQLi. Finns det fördelar kontra PDO..?
|
Citat:
Vad han skall skydda sig emot beror ju givetvis på vad han skall jobba med, kopplingar och vad han skall presentera. Det framgår inte ens vilken plattform han kommer använda sig av, och ni förusätter att det handlar om PHP och MySQL. Visst kan detta vara korrekt, men för att kunna ge han en bättre bild över vad som behöver tänkas på - så bör väl någon fråga om tekniska förutsättningar, och vad som skall användas. Skall han t ex använda sig av LDAP (vilket dock inte är sannolikt i hans projekt) så kommer vi in på LDAP-injections, vilket är precis lika allvaligt som SQL-injections. - Vidare så kanske det bör läsa om XSS? - Han bör kanske stänga av känsliga felmeddelanden? - Han bör se över övriga publika tjänster som snurrar på hans server som kan penetreras? ...osv Kortfattad poäng: Att fråga "Hur ska jag skydda filerna från hackers eller liknande?" är lika dum fråga som "Hur långt är ett snöre?" när man inte specificerar - och speciellt när du hävdar att det är en "stor" fråga i ditt sammanhang. Eller är det jag som har missat något? |
Jag har lite funderingar kring säkerhet också. Knackar ASP classic.
Formulärsfältet "kommentar" kollas med Regexp så det är exempelvis A-Z, a-z, 0-9. Om det replikerar True, är det lugnt att köra formulärsfältsvärdet ostrippat i en SQL-sträng eller är det möjligt att mata in data som går igenom regexpen men som ändå innehåller skräp som kan manipulera SQL-strängen? Om jag sätter en session på en sida och vill skriva ut den på nästkommande utan Server.HTMLEncode() / htmlspecialchars(), kan jag vara säker på att den innehåller det jag själv angett den till eller kan andra manipulera session-innehåll ifall någon exempelvis vet en sessions namn? Vilka tecken bör strippas bort ifall man vill använda en Form/QueryString-variabel i en SQL-sats? Räcker det med att ersätta enkelfnutt med två? |
Citat:
Citat:
|
Citat:
|
Citat:
En "stor fråga" som kan summeras på 3 rader är verkligen ett skämt. |
Citat:
Sen tycker jag att bara för att du har klientvalidering så skippa inte servervalideringen.. Vet inte hur asp classic är (har bara jobbat med asp.net 3.5 (ado).. men där finns funktioner så att man kan lägga in data till en query som parameter vilket är ett säkert sätt - iaf mot sql injections. |
Citat:
Jag menar.. när du började knacka kod haltande - visste du om alla säkerhetsrisker och fallluckor då? ;) Det är bra att trådskaparen frågar ju :) Jag har sett många exempel på helt livsfarlig kod med massor av hål. |
Ju mer jag lär mig desto mer okunnig känner jag mig!
|
Citat:
|
Citat:
Citat:
|
Citat:
|
Citat:
Andra Pro/Con är en google sökning iväg (http://www.google.se/search?q=PDO+mysqli) |
Får kika på parametriserade frågor då. Tack för svaren :)
|
Citat:
En stor del av wn-befolkningen verkar ju jobba med php, och jag vet inte riktigt hur enhetstester bäst läggs upp i ett php-projekt. Själv sysslar jag mest med ASP.NET och C# numera, och där är det väldigt smidigt, t.ex. med NUnit. För övrigt är det ju att rekommendera att använda enhetstester till fler delar av systemet än kontroll av indata... |
Har för mig det finns något som heter PHPUnit eller nått åt det hållet för enhetstester.. dock ej kikat på det.
|
Citat:
|
Alla tider är GMT +2. Klockan är nu 04:26. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson