php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.04.2009, 13:55  
Erfahrener Benutzer
 
Registriert seit: 09.05.2005
Beiträge: 561
BartTheDevil89 kann nur auf Besserung hoffen
Standard Sicherheitstechnisch verschiedene Eingaben filtern

Hallo,

ich stehe vor dem Problem, dass ich verschiedene Eingaben filtern muss bezüglich deren Sicherheit. Dabei sind mir grundsätzlich folgende Varianten eingefallen:

1. Zahlen:
Die Eingabe soll eine einfache Zahl wie 4,55345,334 oder so sein. -> zur Sicherheit durch intval() durchjagen und schon sind böse Eingaben zerstört.

2. Begriffe ohne Leerzeichen:
Begriffe wie "delete", "neu", "edit" oder auch "de-at" sollen gefiltert werden. -> ?

3. Text mit Leerzeichen:
Eine Eingabe der Form "Hier ist es schön" zum Beispiel. -> ?

4. ganze normale Texte:
Ganz normale Texte mit Leerzeichen, Leerzeilen....... -> ?

Gesamt stellt sich auch die Frage, ob zum Beispiel immer in den MySQL-Befehlen ein addslashes() bei jeder Eingabe Sinn macht. Denn damit wird ja selbst bei nem Versuch von einer SQL-Injektion einfach dieser SQL-Code in der DB als Text gespeichert.

Gibts sonst noch paar Sicherheitstipps?

Dankeschön, denn ich möchte mir für ein CMS ein Gesamtsicherheits-System überlegen und deswegen diese Grundsatzfragen.
BartTheDevil89 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 12.04.2009, 14:04  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Hi,

PHP: mysql_real_escape_string - Manual ?
Asipak ist offline  
Alt 12.04.2009, 14:10  
PTC
Erfahrener Benutzer
 
Benutzerbild von PTC
 
Registriert seit: 27.10.2007
Beiträge: 1.708
PHP-Kenntnisse:
Anfänger
PTC ist einfach richtig nettPTC ist einfach richtig nettPTC ist einfach richtig nettPTC ist einfach richtig nett
Standard

Ich verstehe nicht ganz, was du in Beispiel zwei bis drei meinst.

PHP Security Consortium: Projects
PTC ist offline  
Alt 12.04.2009, 14:18  
Erfahrener Benutzer
 
Registriert seit: 08.04.2009
Beiträge: 324
Creator befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
1. Zahlen:
Die Eingabe soll eine einfache Zahl wie 4,55345,334 oder so sein. -> zur Sicherheit durch intval() durchjagen und schon sind böse Eingaben zerstört.
4,55345,334 das ist ein Sting und kein Integer.

Zitat:
Gesamt stellt sich auch die Frage, ob zum Beispiel immer in den MySQL-Befehlen ein addslashes() bei jeder Eingabe Sinn macht. Denn damit wird ja selbst bei nem Versuch von einer SQL-Injektion einfach dieser SQL-Code in der DB als Text gespeichert.
Verwende immer mysql_real_escape_string, da diese Funktioniert mehr escapt als addslashes().

Bei 2 und 3 kann ich kein problem erkennen.

Zitat:
4. ganze normale Texte:
Ganz normale Texte mit Leerzeichen, Leerzeilen....... -> ?
Hier musste du bei der Ausgabe auf sonderzeichen achten.
Da man sonst z.b. JS Code einschleusen kann.

htmlspecialchars

Du musst alles zu 100% Validieren, was vom Client kommt. Egal ob es $_POST, $_GET, $_COOKIE oder JS ist. Alles kann böse Inhalte haben.

Bei Sessions wird das ganze dann recht Kompliziert. Sessions können übernommen werden.
Es können vom User ausversehen Links mit der Session_id verteilt werden.
Cookies können übernommen werden usw.

Hier muss man dann abwiegen wie viel sicherheit man braucht und wieviel Usability man bieten möchte.

Geändert von Creator (12.04.2009 um 14:23 Uhr).
Creator ist offline  
Alt 13.04.2009, 10:08  
Erfahrener Benutzer
 
Registriert seit: 09.05.2005
Beiträge: 561
BartTheDevil89 kann nur auf Besserung hoffen
Standard

Hi,

vielen Dank für die Hilfe.

Also ich fasse mal zusammen:

1. Zahlen:
Mit 5,345345,454 waren halt die Zahlen 5 und 345345 und 454 zum Beispiel gemeint. Und die werf ich doch am einfachsten durch intval durch.

2. Begriffe ohne Leerzeichen:
Einfach durch mysql_real_escape_string durch und gut...

3. Text mit Leerzeichen und 4.:

Durch htmlspecialchars durch und dann eben noch mysql_real_escape_string.

Und ansonsten alles, bis auf Fall 1 mit den Zahlen, was in eine DB reinkommen soll, durch mysql_real_escape_string durchjagen. Hab mir da auch noch bisschen was durchgelesen und hab gefunden, dass von wenigen Ausnahmen der Fall ist. Aber jetzt mal im Ernst....was könnte so eine Ausnahme sein?

Die Validierung jeglicher Eingaben, aber auch COOKIE,_SERVER-Wert, etc. müssen natürlich gemacht werden. Deswegen überleg ich mir eben ein komplettes System.

Also passt meine Übersicht jetzt oder sollte noch was mit gemacht werden?

Dankeschön
BartTheDevil89 ist offline  
Alt 13.04.2009, 10:29  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

mysql_real_escape_string reicht vollkommen beim Speichern.

Beim Ausgeben von Benutzereingaben anstelle von htmlspecialchars htmlentities verwenden. Nicht beim Speichern in der DB (wenn du alles auf utf-8 gestellt hast, kriegst da auch keine Probleme)

Zitat:
string htmlentities ( string $string [, int $quote_style= ENT_COMPAT [, string $charset [, bool $double_encode= true ]]] )
Die Funktion ist komplett identisch zu htmlspecialchars(), allerdings wandelt htmlentities() wirklich alle Zeichen, die eine HTML-Code-Entsprechung haben, in diese Entsprechung um.
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist gerade online  
Alt 13.04.2009, 13:30  
Erfahrener Benutzer
 
Registriert seit: 08.04.2009
Beiträge: 324
Creator befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Durch htmlspecialchars durch und dann eben noch mysql_real_escape_string.
Ich würde immer alles ungefiltert in die Db schreiben. Mit der ausnahme von mysql_real_escape_string.

Man kann nie wissen, wie man die Daten noch verarbeiten muss.
Beispiel:
Wenn man BB Code verwendet, würde ich diesen Text ungeparst in die db schreiben, weil du nie wissen kannst ob beim Parsen mal änderungen gemacht werden müssen.

Machst du das vor dem Speichern in der Db und hast schon 100.000 Datensätze muss du dir wieder was einfallen lassen.
Creator ist offline  
Alt 17.04.2009, 17:28  
Erfahrener Benutzer
 
Registriert seit: 09.05.2005
Beiträge: 561
BartTheDevil89 kann nur auf Besserung hoffen
Standard

OK gut...und würdet ihr das mysql_real_escape_string im speichern in der DB verwenden, oder sobald die mit $_POST oder so übergeben wird?
BartTheDevil89 ist offline  
Alt 17.04.2009, 17:43  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Du mußt mysql_real_escape_string schon in Zusammenhang mit der db resource verwenden.
Sprich am Script Anfang ein array_map("mysql_real_escape_string",$_POST), ohne vorher die db Verbindung zu initialisieren, macht gar keinen Sinn.

Also in den query string rein und du machst nichts verkehrt.


Gruß
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist gerade online  
Alt 18.04.2009, 14:31  
Erfahrener Benutzer
 
Registriert seit: 09.05.2005
Beiträge: 561
BartTheDevil89 kann nur auf Besserung hoffen
Standard

Achso ok....also grundsätzlich meinst du so?

PHP-Code:
$data $_POST['data'];
//hier passiert etwas mit den Daten, die beispielsweise durch if-abfragen gezogen werden
mysq_query("insert into db set data = '"mysql_real_escape_string($data).."'"); 
So oder soll ich das schon irgendwie vorher durchziehen? Denn da finden vielleicht noch if-Abfragen oder so mit der $data-Variable statt.
BartTheDevil89 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
2 verschiedene aktionen mit einem submit-button lumpatzi_v PHP Tipps 2009 5 24.01.2009 17:06
[Erledigt] Suche in Datenbank filtern h0pesfall PHP Tipps 2008 2 19.09.2008 14:11
[Erledigt] <script>-Values mit Blacklist aus Text filtern? BartTheDevil89 PHP Tipps 2008 3 13.09.2008 22:50
abfrage nach mehreren filtern ketchup PHP Tipps 2008 26 26.08.2008 14:50
Verschiedene Werte in verschiedene Zeilen in eine Tabelle einfügen Heizkessel PHP Tipps 2008 4 15.02.2008 13:53
[Erledigt] verschiedene Versionen auf einem W2K3 Server betreiben PHP Tipps 2006 2 13.01.2006 17:39
[Erledigt] CSS: Verschiedene Farben f�r verschiedene Hyperlinks HTML, Usability und Barrierefreiheit 2 01.01.2006 13:08
Links aus einer Seite filtern und nacheinander Öffnen? PHP Tipps 2005-2 4 29.08.2005 17:49
Text aus plain text datei filtern PHP-Fortgeschrittene 7 19.07.2005 15:59
[Erledigt] Eingaben ohne Timeout piepsen PHP Tipps 2005-2 8 13.07.2005 19:20
text aus eingabefeld filtern PHP Tipps 2005 13 29.03.2005 17:06
Eingaben auf mehreren Seiten PHP Tipps 2005 4 26.01.2005 23:18
Zurück Funktion überschreibt die geänderten Eingaben nicht PHP Tipps 2004-2 1 02.12.2004 13:19
Verschiedene Umsetzungen für Template-Systeme PHP Tipps 2004-2 5 27.11.2004 09:51
2 verschiedene Anfragen, zu einer Anfrage vereinen fender Datenbanken 4 23.11.2004 09:07

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php eingabe filtern, php eingaben filtern, php benutzereingaben filtern, php eingabe sicherheit, eingaben filtern, php html eingabe filtern, php eingabe filter, eingaben filtern php, eingabe filtern php, php eingabefilter, php sicherheit eingabe, eingabefilter php, php texteingabe filtern, html eingaben sicher, eingabe filter php, php eingaben sicherheit, html eingabe filtern, php filter eingabe, php html aus eingaben filtern, eingabefeld filter php

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:37 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