Kom ihåg mig?
Home Menu

Menu


Säkerhet?

 
Ämnesverktyg Visningsalternativ
Oläst 2009-06-02, 23:24 #1
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
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!
youheardit är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-03, 00:10 #2
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
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();
Sedan så definerar du 'OK' när dessa "core" filer inkluderas. Bara ett exempel!

Lite mer: http://www.sitepoint.com/article/php-secur...urity-blunders/
KarlRoos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-03, 01:01 #3
elitassons avatar
elitasson elitasson är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Aug 2007
Inlägg: 812
elitasson elitasson är inte uppkopplad
Mycket flitig postare
elitassons avatar
 
Reg.datum: Aug 2007
Inlägg: 812
addslashes();
htmlspecialchars();

Där har du några funktioner du bör ha koll på.
elitasson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-03, 09:28 #4
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Kod:
function secure($value) { if ($value) { return mysql_real_escape_string($value); } else return false; }

$name = (isset($_GET['name'])) ? $_GET['name'] : false;

mysql_query("SELECT .... WHERE name='" . secure($name) . "'");
Jonas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-03, 09:44 #5
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
Tack för dessa svaren!
Ska hålla god koll på dem!
youheardit är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-03, 10:17 #6
Johan_S Johan_S är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 99
Johan_S Johan_S är inte uppkopplad
Medlem
 
Reg.datum: Aug 2006
Inlägg: 99
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'])){
   //okej
} else {
   //någon blev fel
}
Funktion skriven av Malte tidigare på Phpportalen:

Kod:
// En funktion att anvndas nr magic_quotes_gpc inte r satt. Fr att frhindra SQL-injections, eller i lidrigare fall MySQl-fel.
function db_escape ($post)
{
  if (is_string($post)) {
   if (get_magic_quotes_gpc()) {
    $post = stripslashes($post);
   }
   return mysql_real_escape_string($post);
  }
  
  foreach ($post as $key => $val) {
   $post[$key] = db_escape($val);
  }
  
  return $post;
}
Anropas med till exempel:
Kod:
$_POST = db_escape($_POST);
$_GET = db_escape($_GET);
Johan_S är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-03, 10:29 #7
danjel danjel är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 214
danjel danjel är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 214
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__) {
	global $ERR;

	if ($type == 8 || $ERR != '') return;
	$err = "<?php exit; ?>"; //secure
	$err .= date ("M d Y H:i:s"). "\n\nmess: " . $message ."\n\nfil: $file ";
	$err .= "\n\ntyp: " . $type ."\n\nline: " . $line . "\n\n" .'phpfil: ' .$_SERVER['PHP_SELF'] ."\n\n";
	$err .= "cookie: " .var_export($_COOKIE, true) ."\n\n";
	$err .= "REFERER: " . $_SERVER['HTTP_REFERER'];
	$err .= "\n----------------------- \n\n\n\n";
	
	error_log($err, 3, REAL_PATH . 'log/'. date("Ymd"). '_err.php');

	if(B_PROD && DEBUG == false){ 
 
 ob_end_clean();
 redir("scripts/error_page.php");
	}else{
 print nl2br("ERROR");
 $ERR=$err;
	}
	
}
if( ! defined("ERR_HANDLE_DISABLE")){	
	set_error_handler('error_handler');
}
Använd krypterade lösenord i databasen, obs att endast md5() hash inte är fullgott skydd.

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
danjel är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-03, 10:42 #8
Draqir Draqir är inte uppkopplad
Medlem
 
Reg.datum: May 2009
Inlägg: 125
Draqir Draqir är inte uppkopplad
Medlem
 
Reg.datum: May 2009
Inlägg: 125
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.
Draqir är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-03, 12:44 #9
taz76 taz76 är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2008
Inlägg: 388
taz76 taz76 är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2008
Inlägg: 388
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.
taz76 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-06-03, 12:57 #10
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
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.
Jonas är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 07:30.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017