php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.05.2008, 23:08  
Erfahrener Benutzer
 
Registriert seit: 02.03.2008
Beiträge: 351
robydog befindet sich auf einem aufstrebenden Ast
Standard Sicherheit in PHP

Hallo

mal ne allgemeine Frage. Was sollte alles unternommen werden um PHP Sicherheitslücken zu schliessen. Wie zb SQL Injection.
Ich denke es wäre für viele Anfänger sinnvoll wenn wir hier so ein Sicherheitsthema hätten wo alle wichtigen Sachen zum Thema Sicherheit steht. Ich hab versucht über die Suche was zu finden. Aber nicht viel gefunden. Auch über Google nicht gross.

Einzigste was ich weiss ich SQL Injection. Aber wie genau sollte das angewendet werden.

Zb bei den $_GET und $_POST
mysql_real_escape_string(strip_tags($_GET['id']));
mysql_real_escape_string(strip_tags($_POST['id']));

Ist das so richtig?
Was ist mit?

= trim($_POST["provider"]);
= (int) trim($_GET["id"]);

Was sollte man sonst noch alles unternehmen für die Sicherheit?

Wäre sicherlich für viele hier hilfreich

Geändert von robydog (04.05.2008 um 23:13 Uhr).
robydog ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 04.05.2008, 23:18  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.425
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Oje, das ist ein sehr weit gefächertes Thema. Ich denke mal, dass man dazu ganze Foren vollschreiben könnte.
An dieser Stelle empfehle ich dir einfach mal ein Buch darüber und hoffe, dass das nicht als Werbung gewertet wird.
dpunkt.verlag | Bücher
Manko10 ist offline  
Alt 04.05.2008, 23:24  
Erfahrener Benutzer
 
Registriert seit: 02.03.2008
Beiträge: 351
robydog befindet sich auf einem aufstrebenden Ast
Standard

Ob das Thema nun lang oder Kurz ist ich denke das wichtigste könnte hier doch zusammengetragen werden so dass gerade wir Anfänger von Anfang an die wichtigsten Sachen mit einbauen können. Mir gehts gerade so dass ich ein script komplett fertig gebaut habe und nun werde ich wohl einiges abändern müssen
robydog ist offline  
Alt 05.05.2008, 01:16  
Benutzer
 
Registriert seit: 07.11.2007
Beiträge: 45
phpler befindet sich auf einem aufstrebenden Ast
Standard

Grundsätzlich gilt: alles, was als Eingabe kommt, ist Schadcode, bis das Gegenteil angenommen werden kann

ALLE zu verarbeitenden Variablen prüfen

bereits geprüfte Variablen müssen nach einem Include (o.ä.) erneut geprüft werden, wenn sie dort verwendet werden

direkte Verwendung von durch $_GET und Konsorten übergebenen Variablen immer vermeiden, also NICHT einfach:
PHP-Code:
 include($_GET['includefile']); 
phpler ist offline  
Alt 05.05.2008, 01:25  
Neuer Benutzer
 
Registriert seit: 03.05.2008
Beiträge: 2
Schneemann befindet sich auf einem aufstrebenden Ast
Standard

Mit dem folgenden kleinen Script am Anfang deiner Datei stellst du sehr gute "Säuberer" zur Verfügung.

PHP-Code:
function array_htmlentities( &$var )
{
  if( 
is_string$var ) )
  {
    
$var htmlentitiesstrip_tags$var ) );
  }
  else
  {
    if( 
is_array$var ) )
    {
      foreach( 
$var as $key => $value )
        
array_htmlentities$var[$key] );
    }
  }

Dort wo du die Funktion brauchst kannst du sie dann aufrufen. Bsp.:
PHP-Code:
array_htmlentities($_GET
Wenn du natürlich auch Quellcode oder formatierte Texte durchlassen willst brauchst du weitreichendere Prüfungsfunktionen.
Schneemann ist offline  
Alt 05.05.2008, 07:54  
Erfahrener Benutzer
 
Benutzerbild von Hu5eL
 
Registriert seit: 26.02.2008
Beiträge: 342
Hu5eL befindet sich auf einem aufstrebenden Ast
Hu5eL eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von robydog Beitrag anzeigen
PHP-Code:
mysql_real_escape_string(strip_tags($_GET['id'])); 
mysql_real_escape_string(strip_tags($_POST['id'])); 
der teil sollte eigentlich alles enfternen was direkt auf deine db wirkt, oder html-befehle in z.b eine ausgabe gibt...

meiner meinung nach sollte das reichen... zumindest bei strings. wenns um zahlen geht solltest du das z.b per preg_match überrüfen ob nur zahlen drin vorkommen...

dann sollten eingaben erstmal "grob" sicher sein... natürlich immer darauf achten das der user das was er amcht auch darf... im bezug auf z.b cookie-faking, etc.

ich selbst benutze für strings auch diese 2 befehle.... zu überprüfen wäre noch auf z.b ein subselect o.ä... das mach ich per foreach und schau nach der syntax... klar musst du aufpassen, falls du sql-befehle übergibst, wirst du immer fehler bekommen, weil du sie ja filterst
das so mein grobes wissen dazu...
Hu5eL ist offline  
Alt 05.05.2008, 10:47  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.072
PHP-Kenntnisse:
Anfänger
litterauspirna befindet sich auf einem aufstrebenden Ast
litterauspirna eine Nachricht über ICQ schicken
Standard

Hallo also generell gilt alles was jemand schreibt oder einträgt ist alles nicht vertrauenswürdig zu sehen und genereller Schadfaktor!
Zum Beispiel bei Sachen wie $_POST,$_COOCKIE,$_GET,$_SESSION,$_REQUEST,$_FILES also alles was unter register globals zählt.

mysql_real_escape_string reicht schon völlig zu um sich vor SQL Injektions zu schützen. Als weitere Sicherheitsmasnahme um z.B. bösen Links vor zu beugen sollte man auf jede Variable egal ob das eine zahl oder ein string ist (auch zahlen können strings sein) sollte man ein regex zum Beispiel mit preg_match machen,da ist eigentlich alles mit getan. Denn da lässt man nur die gewünschten Zeichen zu,alles andere wird als Fehler gewertet!

Man muss natürlich auch darauf achten sich vor Client Seitigen _Angriffen zu schützen z.B. bei einem action Atribut im Formular. Das mache ich zum Beispiel so!

PHP-Code:
<form action="<?php echo htmlentities($_SERVER['ÜPHP_SELF']) ?>"
 method="post">
Da lässt sich z.B. ein Javascript nicht mehr drauf ausführen da html tags gefiltert werden!

mfg der litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Alt 05.05.2008, 11:15  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Ein mE sehr wichtiger Aspekt sind die verwendeten Paradigmen. Man muss sich klar machen, was jede Entscheidung für Konsequenzen hat.
Zum Beispiel: Ich entscheide mich dafür, für die Datenbankanbindung mysql_connect, mysql_query usw. zu verwenden. Damit habe ich mindestens drei Entscheidungen getroffen.
  • Die offensichtlichste: Die Bindung an MySQL. Ich kann mich mit mysql_connect nicht zu einem PostgreSQL Server verbinden. MySQL spezifische Datentypen und Funktionen zu verwenden, steigt damit gerade im Kurs. Ich kann das Datenbanksystem schwerer auswechseln. Dafür kann ich auf mehr Funktionalität zurückgreifen und eventuell schnellere Lösungen entwickeln. Standard-SQL deckt eben nicht alles mögliche ab und Datenbank-Abstraktionen können mit einem mal (scheinbar grundlos) langsam werden, weil man irgendetwas abstrakt so abgebildet hat, dass es konkret schlecht umgesetzt wird.
  • Es werden SQL Statements wie INSERT INTO tablename (a,b,) VALUES ('x','y') verwendet. Sprachelemente (der Sprache SQL) werden mit den Daten vermischt. Daher rührt die Anfälligkeit für injections. Damit es sicher bleibt, muss man konsequent die Daten kontrollieren, in diesem Fall mit mysql_real_escape_string. Vergisst das irgendwo jemand, hat man eine Lücke. Dafür ist es leicht zu schreiben und jemand, der in SQL versiert ist, kann das Statement in jeder Sprache verstehen. Außerdem brauche ich nur ein kleines Set an speziellen Funktionen, der Rest ist String-Manipulation
  • Prozedurale/Imperative Programmierung. Ich muss nach jedem Funktionsaufruf den Rückgabewert prüfen und auf Fehler reagieren und sie (weiter-)propagieren. Tue ich das an irgendeiner Stelle nicht, geht Fehlerinformationen verloren.
Wenn irgendeine der Konsequenzen Probleme macht, muss man bis zum Grund nach oben gehen, eine neue Lösung finden und die Konsequenzen wieder nach unten durchdenken.
Insbesondere das Zusammenwürfeln von irgendwelchen Codestücke aus Foren ist ein ziemlich sicherer Weg, ein schlechtes Gesamtwerk zu erzeugen.

David ist offline  
Alt 05.05.2008, 13:49  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Zitat:
Zitat von litterauspirna Beitrag anzeigen
mysql_real_escape_string reicht schon völlig zu um sich vor SQL Injektions zu schützen.
Code:
$id = mysql_real_escape_string($_GET['id']);
$sql = 'SELECT * FROM table WHERE id = '. $id;
example.com/script.php?id=>=1

__________________
Today you...Tomorrow me.
agrajag ist offline  
Alt 05.05.2008, 13:51  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.072
PHP-Kenntnisse:
Anfänger
litterauspirna befindet sich auf einem aufstrebenden Ast
litterauspirna eine Nachricht über ICQ schicken
Standard

Häh? Was willst du mir grad damit sagen?

Übrigens auch die id kann man mit einem regex bearbetien und damit sicher stellen das id auch nur eine Zahl ist! Da brauche ich nicht unbedingt mysql_real_escape_string!
Das hier reicht völlig aus!

PHP-Code:
<?php
if(isset($_GET['id']))
{  
 
$id preg_replace ("/[^0-9]/"'',  $_GET['id']);
}
?>
Damit stellst du sicher das id nichts anderes als eine Zahl ist!
Wenn du die id über ein hidden feld weiter verwendest dann natürlich macht mysql_real_escape_string denn dann gilt ja wieder jedes Formular Element bzw. was über ein Formular kommt ist als nicht vertrauenswürdig einzustufen!
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de

Geändert von litterauspirna (05.05.2008 um 13:55 Uhr).
litterauspirna ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
BACKLINK CHECK und SICHERHEIT von zentraler CSV-Datei ff-webdesigner.de PHP-Fortgeschrittene 16 27.11.2008 20:25
externe MySQL und Sicherheit sportyflo Datenbanken 2 22.02.2008 11:09
FON und die WiFi Ads - Bald mehr Sicherheit PHP Tipps 2007 0 03.08.2007 12:06
PHP Sicherheit Plague PHP Tipps 2007 13 26.04.2007 16:24
PHP Sicherheit phpdummi PHP Tipps 2006 1 27.09.2006 23:31
Erfahrung mit Sessions ( Sicherheit ) GELight PHP Tipps 2006 6 11.08.2006 17:55
Sicherheit... GELight PHP Tipps 2006 5 31.01.2006 15:58
Sicherheit aufm Webserver ? Cyberbob_at_tot Off-Topic Diskussionen 7 17.10.2005 16:22
Frage zur Sicherheit von GET Variablen malaga PHP Tipps 2005-2 3 20.09.2005 13:36
Sicherheit.... renzo PHP Tipps 2005-2 1 27.06.2005 15:53
Sicherheit von Klartext-Passwörtern PHP Tipps 2005 14 30.03.2005 15:22
[Erledigt] Thema Sicherheit? PHP-Fortgeschrittene 5 05.11.2004 05:43
Sicherheit bei Wertübergaben PHP Tipps 2004 3 14.10.2004 18:06
Apache öffentlich machen. Sicherheit? Server, Hosting und Workstations 3 07.07.2004 03:20
Sicherheit bei URL-Übergabe pcschröda PHP-Fortgeschrittene 25 28.06.2004 16:44

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
strip_tags sicher, strip_tags sicher?, array_htmlentities, php $_get sicherheit, php strip_tags sicher, varialen auf schadcode überprüfen, php strip_tags sicherheit, variablenauf schadcode überprüfen php, php variablen auf schadcode prüfen, php preg_match text durchlassen, php post sicherheit, html input boc checken schadcode, post variablen prüfen schadcode, _get sicherheit php, strip_tags sicherheitslücke, sicherheit strip_tags, strip_tags sicherheit, if $_get sicherheit, $_post links werden gefiltert provider, http://www.php.de/php-tipps-2008/1106-sicherheit-php.html

Alle Zeitangaben in WEZ +1. Es ist jetzt 02:38 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum