Salve come dal titolo mi hanno defacciato il sito..volevo sapere se avevate un beckup perfavore se potete mandatemi un pm. Grazie.
Printable View
Salve come dal titolo mi hanno defacciato il sito..volevo sapere se avevate un beckup perfavore se potete mandatemi un pm. Grazie.
Unico problema... Se ti hanno defacciato il sito oggi non è che domani se ne stanno fermi (purtroppo per noi)... Devi trovare i bug che hanno sfruttato nel tuo sito (se ci sono) e tapparli. Alle volte non ce se ne rende conto di avere dei buchi e anche i più esperti sbagliano.
Io di solito uso questa (l'ho fatta io ma non ci vuole un mega genio per farla quindi te la regalo):
Ecco come usarla:Codice PHP:
<?php
class DB {
private $dbHandle;
private $LastResource;
public function __destruct() {
$this->Close();
}
/*
* Invoca mysql_connect. Implementato solo per rendere più semplice e di facile comprensione
* l'utilizzo di questa classe.
*/
public function Connect($Host, $Username, $Password) {
mysql_connect($Host, $Username, $Password);
}
/*
* $Query è la stringa SQL da inviare. Deve contenere dei caratteri %0, %1, %2... ai quali verrÃ
* sostituito il parametro con indice corrispondente. Ad esempio %0 verrà sostituito con $Params[0].
* $Params è un array di stringhe da modificare e inserire in $Query. La modifica subita dipende da
* $ParamsHandlingType. $ParamsHandlingType è un array di stringhe, le quali possono assumere i
* seguenti valori: 'md5', 'SQLSafe', 'None'.
*/
public function SendSafeQuery($Query, array $Params, array $ParamsHandlingType) {
for ($i = 0; $i <= count($Params) - 1; $i++) {
if (is_integer(strpos($Query, '%'.$i))) {
switch ($ParamsHandlingType[$i]) {
case 'md5':
$Query = str_replace('%'.$i, md5($Params[$i]), $Query);
break;
case 'SQLSafe':
$Query = str_replace('%'.$i, mysql_real_escape_string($Params[$i]), $Query);
break;
case 'HTMLSafe':
$Query = str_replace('%'.$i, htmlentities($Params[$i]), $Query);
break;
case 'SQL_HTMLSafe':
$Query = str_replace('%'.$i, htmlentites(mysql_real_escape_string($Params[$i])), $Query);
break;
case 'None':
$Query = str_replace('%'.$i, $Params[$i], $Query);
break;
default:
die('[FATAL ERROR]: '.$ParamsHandlingType[$i]." is not recognised. Use one of the following values instead: 'md5', 'SQLSafe', 'HTMLSafe', 'SQL_HTMLSafe', 'None'.");
}
}
}
if (isset($this->LastResource)) {
mysql_free_result($this->LastResource);
}
$Result = mysql_query($Query) or die;
$this->LastResource = $Result;
return $Result;
}
/*
* Invoca mysql_query. Implementato solo per rendere più semplice e di facile comprensione
* l'utilizzo di questa classe.
* ATTENZIONE! Questo metodo non è in grado di difendersi da SQL Injections. Per difendersi da questo
* tipo di attacchi bisogna utilizzare il metodo SendSafeQuery(...).
*/
public function SendQuery($Query) {
$Result = mysql_query($Query) or die;
return $Result;
}
/*
* Chiude il database e libera la memoria. è consigliato l'utilizzo di unset nel caso ci si debba collegare
* a un altro database. Successivamente deve essere creata una nuova istanza.
*/
public function Close() {
if (isset($this->LastResource)) {
mysql_free_result($this->LastResource);
}
if (isset($this->dbHandle)) {
mysql_close($this->dbHandle);
}
}
}
?>
Usa:Codice PHP:
$db = new db;
$db->Connect(...);
$db->SendSafeQuery("SELECT * FROM users WHERE username='%0' AND password='%1'", array($uname, $passwd), array('SQL_HTMLSafe', 'md5'));
'HTMLSafe' per evitare Code Injection di JavaScript o HTML;
'SQLSafe' per evitare SQL Injections;
'SQL_HTMLSafe' usa le due precedenti insieme;
'md5' cripti la password (io direi che è indispensabile);
'None' non fai niente.
Inoltre potrebbe esserti utile questo:
http://blacklight.gotdns.org/wiki/in...curezza_in_PHP
Parla di come difenderti da ciò che ti è successo.
@provaphpprova: a cosa serve lo script che hai postato?
SE TI SERVE PRENDILO PURE =) MI FA PIACERE MA RICORDATI DI DIRE CHE E' DI MIA CREAZIONE SE LO DAI AD ALTRI
Allora. il mio sito vero e proprio è blackgecko quindi puoi chiamarmi black =). provaphpprova lo uso come testing ground insieme a degli amici.
Lo script è praticamente autodocumentante quindi puoi tranquillamente dare una letta e vedrai che in 5 minuti avrai visto tutto quello che ci può essere da vedere. Ti spiego le uniche cose che potrebbero metterti un po' in crisi.
è una classe PHP che ti permette di connetterti a un database e di inviare delle query senza il rischio di beccarti una SQL Injection e in più puoi criptare le password usando l'algoritmo md5. Questo è un argomento che spesso e volentieri non si conosce. Per sicurezza te lo spiego a grandi linee in modo da evitare di farti fare il giro in internet per trovare una spiegazione terra terra.
Immagina di fare questa query:
In php uname e passwd verranno inseriti così come sono nella query.Codice PHP:
"SELECT * FROM users WHERE username='$uname' AND password='$passwd'"
Se io do il mio username e password reali tutto va bene e io posso fare i normali controlli che faccio successivamente per assicurarmi che l'utente sia corretto:
Se faccio in modo che arrivino delle stringhe "maligne" al posto di username_reale e ahahahahah posso arrivare al punto di svuotare il database.Codice PHP:
"SELECT * FROM users WHERE username='username_reale' AND password='ahahahahaha'"
$uname = "admin" (ma poteva essere di tutto e di più)
$passwd = "' OR 1=1--"
ecco cosa succede:
"SELECT * FROM users WHERE username='admin' AND password='' OR 1=1--'"
Ecco servito l'accesso completo all'amministrazione di un sito! Questo è il meno che può succedere.
Essienzalmente devi fare questo:
Buon divertimento :wink:Codice PHP:
$db = new db;
$db->Connect(...);
$db->SendSafeQuery("SELECT * FROM users WHERE username='%0' AND password='%1'", array($uname, $passwd), array('SQLSafe', 'md5'));
ciao ma almeno ai pensato a chi potrebbe essere il colpevole di attacco al tuo sito cmq mi dispiace
A meno che non lo conosca direttamente la vedo dura che lo becchi. Anzi... Impossibile.