Zurück   Webmasterwelt - Webmaster-Forum > Webdesign und Programmierung Forum > Serverseitige Websprachen

Antwort
 
LinkBack Themen-Optionen Ansicht
  #11  
Alt 27.12.2006, 20:26
Benutzerbild von eforium
Bekannter
 
Registriert seit: 20.01.2006
Beiträge: 1.401
Standard

Auch wichtig ist bei includes darauf zu achten, dass man jeweilige Punkte oder Slashs löscht:

Code:
ulr.de/test.php?f=index
Der PHP Code:

Code:
<?php

$f = $_REQUEST['f'] . 'php';

include($f);

?>
Besser so:

Code:
<?php

$f = ereg_replace('..', '', $_REQUEST['f'])
$f = ereg_replace('/', '', $f);
$f .= '.php';

include(addslashes($f);

?>
Ansonsten kann jede Datei angeschaut werden. addslashes() fügt dann noch Slashes hinzu, wenn z.B. ein $ oder sonst etwas drin ist, also dass keine Scriptvariablen im Include (wie $_SERVER['DOCUMENT_ROOT']) vorkommen können.

Nochmal besser wäre es, die Datei mit einer switch() zu überprüfen... ISt aber blöd, weil dann immer mehrere Files geupdatet werden müssen. Am besten ist es aber, ganz auf so etwas zu verzichten.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Mit Zitat antworten
  #12  
Alt 02.05.2007, 22:58
Benutzerbild von xxl_unna22
Helfer
 
Registriert seit: 23.03.2007
Beiträge: 238
Standard

Zitat:
Zitat von Fruetel
Ja, ein wichtiger Hinweis. Solche SQL-Injection Probleme tauchen auch immer wieder bei semi-professioneller Software auf, PHP-Nuke zum Beispiel hatte in der Vergangenheit öfter Probleme mit solchen Bugs. Gerade wenn der Quellcode der Scripts veröffentlicht wird, müssen die Programmierer hier sorgfältig vorgehen.

Gruss,
Thomas
naja. du bist klasse!
gpl setzt halt den zugang zum code voraus - und aus dem reinen quelltext werden wohl eh bloß die profis schlau. ne injection basiert IMMER auf fehlern beim coden - also eigentlich mehr ein anfänger problem als eines der profis - würde ich mal grob sagen.
auch ein grund warum man generell von seiten im ausland die download finger lassen sollte - denn die "einrecher" installiert man sich meist brav selber auf dem server - newbie prob - die sich halt jeden code und jedes plugin - wozu auch immer auf dem server installieren.

http://www.heise.de/security/
http://www.all-about-security.de/art...12f0a00ab.html

sowie noch einige weitere !

PHP-Nuke nun ... schaun wir mal....
http://www.google.de/search?hl=de&rl...nG=Suche&meta=
Ergebnisse 1 - 10 von ungefähr 263.000 für PHP-Nuke sql injection. (0,09 Sekunden)

e107
Ergebnisse 1 - 10 von ungefähr 59.400 für e107 sql injection. (0,08 Sekunden)

typo3
Ergebnisse 1 - 10 von ungefähr 140.000 für typo3 sql injection. (0,08 Sekunden)

joomla
Ergebnisse 1 - 10 von ungefähr 442.000 für joomla sql injection. (0,19 Sekunden)

Wobei man mal auch klar sagen muss - war nur ein einziger suchbegriff - in dem zusammenhang (eigenlob) beim e107 cms liegt der letzte bekannte security bug in 2004 ! danach ham wir endlich ruhe gehabt weil die plugs die in die releases einziehen - mehr als ausgiebig getestet werden.

jeder anfänger sollte sich auch mal ernsthaft fragen - wenn mir auf der straße jemand was in die hand drückt - ob man das ungesehen in den mund steckt ?

aber warum installieren dann leute sachen - von denen sie nicht mal die ersten 2 zeilen code verstehen ? genau da liegt das problem !
__________________
CMS SUPPORT - SEO - SOLAR - SPIELWAREN - BERGSCHADEN
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Mit Zitat antworten
  #13  
Alt 03.05.2007, 01:01
Benutzerbild von 800XE
Bekannter
 
Registriert seit: 24.10.2004
Ort: Speyer
Beiträge: 1.662
Standard

find ich lustig das du da einen 3 Jahre alten Post Quotest

Zitat:
Zitat von xxl_unna22
in dem zusammenhang (eigenlob) beim e107 cms liegt der letzte bekannte security bug in 2004 !
wenn du mal einen Job suchst,
dann bewerb dich bei M$
ich glaube, dort wärst du am richtigen Platz

Ich hoffe mal,
du willst nicht sagen, weil Google über e107 weniger findet, das es diesbezüglich besser als die Anderen ist?

was weniger bekannt
darüber weniger geschrieben
deshalb weniger gefunden

wie wäre wohl die Bilanz der obigen Suche wenn sich nächste Woche alle openSourcler e107 anschauen und ihre Erkentnisse in ihren Blogs verblogen?


ich hoffe du bist mir jetzt nicht alzu böse, und möchtest mich töten, weil ich diesen Post gepostet habe ....
.... hast du vielleicht mal einen Link für mich, wo steht warum weshalb das e107 e107 heist ... wie kamms zum Namen was soll er bedeuten .... ich denke immer an Lebensmittel(farben)Zusätze wenn ich dieses e107 lese

Zitat:
Zitat von xxl_unna22
in dem zusammenhang (eigenlob)
meins ist besser :lol:
www.CMS800.de
oder wird es irgendwann mal sein :lol:
__________________
Andy 800XE Zmuda ........ /Affilitiv/Affiliatedaten innovativ
Kaiser von XENEVU
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Mit Zitat antworten
  #14  
Alt 10.06.2007, 21:35
Benutzerbild von maject
User
 
Registriert seit: 22.03.2006
Beiträge: 13
Standard Allgemeine Sicherheit

Allgemein gesagt ist das Thema Sicherheit ein weites Feld. Jedoch sollte man sich als Softwareprogrammierer damit ausgiebig beschäftigen. Viele der Threads sprachen schon an, dass SQL-Injections über die Paramter POST und GET kommen. Wer diese vollständig abhorcht, ist im Vergleich zu semi-professioneller Software auf der guten Seite. Man sollte aber nicht vergessen, dass es auch eine SQL-Injection über die globale Variable $_SERVER erfolgen kann. Häufig nutzen zum Beispiel Statistiken die Variabale $_SERVER['HTTP_USER_AGENT'], die wie alle anderen Parameter/Variablen auch manipuliert sein kann. In diesem Falle durch einen vorgeschalteten Proxy oder mittels eines Browser-Plugins.

Auch zu der Passwort-Abfrage möchte ich mich einschalten:

Die nachfolgende MySql-Abfrage ist unsicher:
Code:
$query = " select `id` from `benutzer` where 
                `name`='".$_POST['name']."' and
                `passwort`='".$_POST['passwort']."' Limit 0,1";
Zum Einen kann hier durch eine Kommentierung im Benutzernamen die Passwortüberprüfung hintergangen werden, zum Anderen wird auch nicht (wie viele nicht wissen) auf eine Groß und Kleinschreibung geachtet. Dies mag beim Benutzernamen vielleicht erwünscht sein, jedoch das Passwort verliert dadurch an Sicherheit.

Deshalb verwende ich seit Jahren, so oft wie es nur geht, die nachfolgende SQL-Abfrage. Die Performance, die merklich nur bei großen Portalen herabfällt nehme ich dabei in Kauf:

Code:
 where md5(benutzername) = '".md5($_POST['benutzer'])."' and md5(passwort) = '".md5($_POST['passwort'])."'
Wie man sieht ist Sicherheit nach Jahren noch ein Thema, und wird (leider) auch in Jahren noch Thema sein. Für angehende PHP-Programmierer rate ich deshalb zu sich wirklich damit mal intensiv zu beschäftigen. Ich habe die Erfahrung gemacht, dass ich mittels Bücher sehr viel an Wissen erlange. Manche mögen lieber Tutorials, andere Animationen - für jeden ist etwas dabei! Und leider habe ich auch die Erfahrung gemacht, dass man in relativ einfachen Code sehr viele sicherheitsrelevante Fehler machen kann.
Zum Schluss möchte ich noch darüber philosophieren ! Die Zeit, die ich für die Sicherheit meiner PHP-Scripte aufwende scheint im ersten Moment sehr absurd. Man bekommt auch sonst Lohn oder Dank dafür. Kunden wollen das ihr Script das tut was Sie möchten und selten über den Tellerrand hinaus - "das Kostet ja viel mehr...". Ich versuche deshalb so viele Statistiken wie möglich darüber zu haben, wie viele Angriffe gemacht wurden und natürlich ob diese Erfolgreich abgewehrt wurden. Bei mir kommt dann am Ende ein "Belohnungsgefühl" heraus - das sollte bei Hobby (bisher bei mir leider noch so...) -Programmierern nie fehlen.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Mit Zitat antworten
  #15  
Alt 11.06.2007, 17:17
Benutzerbild von Upitis
Neuer
 
Registriert seit: 28.01.2006
Beiträge: 2
Upitis eine Nachricht über ICQ schicken Upitis eine Nachricht über MSN schicken
Standard

Um XSS(Cross-Scripting) Lücken gut abzusichern gibt es folgende Tags:
strip_tags($string) >Entfernt PHP, HTML Tags
htmlentities($string) Wandelt alle Symbole, wie z.B. <> in die in HTML verwendeten Entities um.

Baut diese Abfragen ein und euer Script ist auch gegen XSS-Sicherheitslücken gefeit.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Mit Zitat antworten
  #16  
Alt 12.06.2007, 16:38
Benutzerbild von eforium
Bekannter
 
Registriert seit: 20.01.2006
Beiträge: 1.401
Standard

Danke für den Aufschlussreichen Tipp, hilft mir
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Mit Zitat antworten
  #17  
Alt 12.06.2007, 18:07
Benutzerbild von 800XE
Bekannter
 
Registriert seit: 24.10.2004
Ort: Speyer
Beiträge: 1.662
Standard Re: Allgemeine Sicherheit

Zitat:
Zitat von maject
Code:
 where md5(benutzername) = '".md5($_POST['benutzer'])."' and md5(passwort) = '".md5($_POST['passwort'])."'
diesen Code fand ich Performenctechnisch garnicht gut ....
... habe eben die Posts darauf "abgetrennt"
http://www.webmasterwelt.net/artikel...rformance.html
__________________
Andy 800XE Zmuda ........ /Affilitiv/Affiliatedaten innovativ
Kaiser von XENEVU
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Mit Zitat antworten
  #18  
Alt 12.10.2008, 13:11
Benutzerbild von jonatan_männchen
Erfahrener
 
Registriert seit: 12.10.2008
Ort: Winterthur (Schweiz)
Beiträge: 90
jonatan_männchen eine Nachricht über MSN schicken jonatan_männchen eine Nachricht über Skype™ schicken
Standard Filter

Ich würde bei allen SQL-Abfragen die Variabeln in ein mysql_real_escape_string() oder ein intval() setzen.
Dazu würde ich eine Filterklasse machen(mit Whitelist):

(Mein Grundsatz: Alle Userdaten Filtern, ich habe darum verschiedene Filter gesendet (email, passwort, username, htmltags(auch in einem Array), länge)
Code:
<?php
class Filter{
	
	const EMAIL_PATTERN = '%^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$%';
	const PASSWORD_PATTERN = '%^[a-zA-Z0-9\_\$\+\*\ç\%\&\/\(\)\?\§]+$%';
	const USERNAME_PATTERN = '%^[a-zA-Z0-9\-_]+$%';
	
	public static function htmltags_array($content){
		$stripped = array();
		foreach($content as $key=>$value) {
			$stripped[$key] = strip_tags($value);
		} return $stripped;
	}
	public static function htmltags($content){
		if (strip_tags($content) == $content){
			return true;
		} return false;
	}
	public static function username($content, $length=0){
		$length_check = true;
		if(!empty($length)) {
			$length_check = self::length($content, $length);
		}
		if(preg_match(self::USERNAME_PATTERN, $content) && $length_check){
			return true;
		}else {
			return false;
		}
	}
	public static function password($content){
		if (preg_match(self::PASSWORD_PATTERN, $content)){
			if (self::length($content, 6) && !is_numeric($content)) {
				return true;
			} else {
				return false;
			}
		}else {
			return false;
		}
	}
	public static function email($content){
		if(preg_match(self::EMAIL_PATTERN, $content)) {
			return true;
		} return false;
	}
	public static function length($content, $lenght){
		if (strlen($content) >= $lenght){
			return true;
		} else {
			return false;
		}
	}
}
?>
Das wird so eingesezt:
Code:
<?php
require_once('Pfad/Filter.class.php');

if (Filter:username('##username##, '##mindestlänge(optional)##') && Filter:password('##username##)){
   mysql_connect('##host##', ##username##', '##password##');
   mysql_select_db('##db##');

   $sql="SELECT COUNT(*) FROM ##db## WHERE password=MD5('".mysql_real_escape_string('##password##').'") AND username='".mysql_real_escape_string('##username##')."'";
   mysql_query($sql);
   mysql_fetch_assoc();
} else {
   return false;
}
?>
Ich hoffe dass hilft
Jonatan
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Mit Zitat antworten
  #19  
Alt 28.11.2008, 17:30
Benutzerbild von hlag
User
 
Registriert seit: 29.10.2008
Ort: Bonn
Beiträge: 10
Standard

Hi,

ich machs so:

ganz normale Query:
Code:
SELECT * FROM tab WHERE user = '$_POST['user']' AND pass = 'md5($_POST['pass'])'
Bis hierhin greift die sql-Injektion.

Daten abholen und in $value speichern.
Code:
if($_POST['user'] == $value ['user'] AND md5($_POST['pass']) == $value ['pass'] )
{
     // user logged in
     .....
}
Die Bedingung haut nur und nur hin, wenn das, was gepostet wurde auch in der Datenbank war.

8-) hlag
__________________
Klaus Blömeke

avaris | godot.de

SiteAlert - Websiteüberwachung
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Mit Zitat antworten
  #20  
Alt 18.03.2009, 00:30
Benutzerbild von Poero9535
Neuer
 
Registriert seit: 09.03.2009
Beiträge: 3
Poero9535 eine Nachricht über ICQ schicken
Standard As soon as you wake up

Bump! thx !

As soon as you wake up, you're fired

Our co-worker went missing for a few hours, and we tore up the place looking for him. The boss finally found him fast asleep. Rather than wake him, he quietly placed a note on the man's chest. "As long as you're asleep," it read, "you have a job. But as soon as you wake up, you're fired."

--------------dvd copy,--------dvd ripper, ------------------dvd to ipod,----------------dvd ripper,-------------------dvd software,-----------
__________________
dvd copy
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiTweet this Post!
Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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



Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr.