Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

Meine Foren software

Diskussion: Meine Foren software im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hallo liebe Freunde, ich habe nun 2 Wochen an meiner Forensoftware gearbeitet und möchte natürlich das alle Sicherheitsaspekte berücksichtigt ...

Antwort
Alt 24.05.10, 10:44   #1 (permalink)
 
Registriert seit: 16.09.08
BunnX Leistung: Facit NTK
Likes: 0
Standard Meine Foren software

Anzeige

Hallo liebe Freunde,

ich habe nun 2 Wochen an meiner Forensoftware gearbeitet und möchte natürlich das alle Sicherheitsaspekte berücksichtigt werden.

XSS und Sql injections habe ich nach meinen Wissensstand eigentlich alle beseitigt. Könnte aber durch aus sein das ich Faselfehler drin habe.

Deswegen meine erste Frage.. Könnt ihr bei Interesse mal das Forum
http://www.poisbb.net unter die Lupe nehmen. Aber nix kaputt machen
Das ich der eigentümer bin soll die Zeile
<meta name="HABO" content="Try hack">

beweißen. Die findet ihr im Quellcode. Und sonst würde ich mich über Feedback freuen.
Wenn jemand Lust hat mit zu entwickeln dann kann er das ruhig machen.

Danke und LG

BunnX ist offline   Mit Zitat antworten
Alt 26.05.10, 20:19   #2 (permalink)
 
Benutzerbild von p0ven
 
Registriert seit: 01.10.06
p0ven Leistung: Facit NTK
Likes: 0
Standard

Hallo,

Hast du z.B. schon skipfish[1] probiert? Damit kannst du die "Basics" schonmal abdecken. Ausserdem gibts Listen mit Bekannten Injections bei anderen System. Die kannst du mit einem einfachen Script auch bei dir prüfen bzw. die Schemen vergleichen[2].

Ob die Forensoftware wirklich sicher ist, könnte man wohl nur mit einem richtigen Security Audit prüfen. Kostet ne Stange Geld sowas "richtig" machen zu lassen.

[1] http://code.google.com/p/skipfish/
[2] http://blog.freewords.in/2010/03/rfi...oeglichkeiten/

f.
p0ven ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 28.05.10, 22:44   #3 (permalink)
Themenstarter
 
Registriert seit: 16.09.08
BunnX Leistung: Facit NTK
Likes: 0
Standard

Hallo,

Danke für die Antwort. Nein hatte ich noch nicht gemacht. Werde ich dann testen müssen wenn mein PC wieder läuft, gerade ist sein Mainboard kaputt.

lg
BunnX ist offline   Mit Zitat antworten
Alt 28.05.10, 23:18   #4 (permalink)
 
Benutzerbild von p0ven
 
Registriert seit: 01.10.06
p0ven Leistung: Facit NTK
Likes: 0
Standard

Ach, was mir so beim durchschauen der Webseite und deiner Postings auffällt:

Nimm dir doch ein bischen mehr Zeit als zwei Wochen und feil noch ein wenig an deiner Software. Du deckst mit deiner Software zwar die Standardfunktionen ab, übergehst aber dafür andere Themen. Sprich, der User hat gar keinen Grund deine Forensoftware zu verwenden, weil es ausgereiftere und "bessere" Programme gibt.

Nur so eine kleine Anregung.

f.
__________________
"But when Quinn the Eskimo gets here - all the pigeons gonna run to him"

Netzstiftung.org - Netzstiftung für den deutschsprachigen Raum
p0ven ist offline   Mit Zitat antworten
Alt 29.05.10, 00:31   #5 (permalink)
 
Registriert seit: 29.03.07
Maulwurf Leistung: Facit NTK
Maulwurf eine Nachricht über ICQ schicken
Likes: 0
Standard

Gefällt mir ziemlich gut, aber die Template Funktion solltest du stark überarbeiten. Was da alles an php-code in den Template Dateien ist ist der Hammer.... du bearbeitest nen Haufen sql Abfragen und Einfügungen in den Templates. Damit sind die so speziell, dass wohl nur noch du durchblickst und kein anderer eins erstellen kann
Achso.. und ich wurde nach der Registration nicht weitergeleitet. Es stand nur irgendwann da, dass ich mich einloggen kann, gesehen habe ich aber noch das Registrationsformular.

Das wären so die 2 Dinge die ich bis jetzt am kritischsten sehe. Wenn die erledigt sind, könnte man sich ernsthaft überlegen das Forum weiter zu benutzen. Hör auf jeden Fall nicht jetzt auf daran zu arbeiten.

Grüße, Maulwurf
Maulwurf ist offline   Mit Zitat antworten
Alt 07.06.10, 19:48   #6 (permalink)
 
Registriert seit: 12.06.08
Keci Leistung: Addierstift
Likes: 0
Standard

Also der Code sieht in meinen Augen wirklich sehr sehr unsicher aus.... oO

-Filter Funktionen fehlen komplett(!!)
-Nach jedem Aufruf der Funktion "header($foo);" fehlt ein "exit;"
-CSRF-Schutz einbauen*1
-Statt $_COOKIE, besser $_SESSION benutzen + Session Fixation*1
-Statt MySQL, besser MySQLi benutzen denn das i steht nicht ohne Grund für Improved(Prepared Statements)
-Statt den ersten 6 Zeilen in der functions.inc.php könntest du die htaccess erweitern und so dieses Problem lösen

*1: Zusammenhängende Dinge

Allet im Schnelldurchlauf

MfG
Keci
Keci ist offline   Mit Zitat antworten
Alt 07.06.10, 19:53   #7 (permalink)
 
Registriert seit: 06.06.09
Thunderb0lt Leistung: 8086
Likes: 6
Standard

Ist evtl. was für dich:

http://www.amazon.de/PHP-Sicherheit-...5933182&sr=8-1
Thunderb0lt ist offline   Mit Zitat antworten
Alt 08.06.10, 18:14   #8 (permalink)
Themenstarter
 
Registriert seit: 16.09.08
BunnX Leistung: Facit NTK
Likes: 0
Standard

Hey danke für die Antworten,

Ich habe gerade kein Geld um Bücher zu kaufen.

Zitat:
-Filter Funktionen fehlen komplett(!!)
-Nach jedem Aufruf der Funktion "header($foo);" fehlt ein "exit;"
-CSRF-Schutz einbauen*1
-Statt $_COOKIE, besser $_SESSION benutzen + Session Fixation*1
-Statt MySQL, besser MySQLi benutzen denn das i steht nicht ohne Grund für Improved(Prepared Statements)
-Statt den ersten 6 Zeilen in der functions.inc.php könntest du die htaccess erweitern und so dieses Problem lösen
Welche Filterfunktionen genau? Also mit mysql_real_escape_string() wird bei jeden Schreiben in die Datenbank der String maskiert und bei der Ausgabe mit htmlspecialchars gegen XSS geimpft.

Mit dem Header muss ich mal googlen habe keine Ahung was gemeint ist.

CSRF abwehr ist eingebaut. Alle wichtigen Funktionen wie Beiträge schreiben oder Profileinstellungen sind mit einer "DRH" Postvariable belegt die sich am Anfang der Seite ändert md5(rnd(microtime)) und am ende in die session geschrieben wird.. so kann man bei einem Forenpost zb sicher sein, dass die Form zum Posten auch vom Forum gestellt wurde.

Mysqli auch keine Ahung -> google meinerseits

Komplett .htaccess ist aber nicht gut wegen ISS Servern z.B. Das Entwicklerboard z.B. läuft auf einem ISS.


Edit:
Ach du meinst bei einer Weiterleitung bei Location z.B. dass man die Ausführung beendet damit der Content nicht mitgesendet wird?

Ich weiß leider schon nicht mehr wo ich header() verwendet habe.
Kannst du mir die Codestelle sagen?

Und nochmal zum Filter.
$s_exist=$sql->query("SELECT fid FROM foren WHERE fid='$fid';");
z.B. Bei $fid bin ich mir sicher das es keine Injection enthält das ganze Board stirbt wenn da Plunder drin steht $fid muss ein int() sein. Bei anderen Abfragen ist es das gleiche. Ja das sieht auf dem ersten Blick sehr nachlässig aus, hoffe eben auch das ich nicht irgendwo etwas vergessen habe.

Geändert von BunnX (08.06.10 um 19:16 Uhr)
BunnX ist offline   Mit Zitat antworten
Alt 08.06.10, 18:26   #9 (permalink)
Senior Member
 
Registriert seit: 13.07.08
enkore Leistung: K 6-3enkore Leistung: K 6-3enkore Leistung: K 6-3
Likes: 85
Standard

Wer ISS benutzt braucht eigentlich auch keine sicheren PHP Apps schreiben /dummer_spruch

Apache2 ist der Standard, wenn der ISS sich nicht dran halten kann und auch keinen alternativen Mechanismus bietet
__________________
"It is the human race! The deterioration of the spirit of man. Man undermining himself, causing a self-willed, self-imposed, self-evident self-destruction."
+++ BREAKING +++ Troll ertrinkt im Planschbecken +++
enkore ist offline   Mit Zitat antworten
Alt 08.06.10, 19:28   #10 (permalink)
 
Registriert seit: 12.06.08
Keci Leistung: Addierstift
Likes: 0
Standard

Durch Maskieren hast du wohl ein "MUSS" erfüllt, aber das Filtern der unerwünschten Sachen fehlt.

MySQLi=> http://de.wikipedia.org/wiki/MySQLi

MD5 ist unsicher, nutz lieber SHA1 und zudem ist deine Lösung in Sachen CSRF keine Lösung, weil du erfassen musst von wem die Nachricht/Post kommt.

PHP-Code:
function GetIP(){return  isset($_SERVER['HTTP_X_FORWARDED_FOR'])&&$_SERVER['HTTP_X_FORWARDED_FOR']!='127.0.0.1'?$_SERVER['HTTP_X_FORWARDED_FOR']:$_SERVER['REMOTE_ADDR'];}  

function 
GenSessionHash(){
return 
sha1($_SERVER['HTTP_ACCEPT_CHARSET'].$_SERVER['HTTP_ACCEPT_ENCODING'].$_SERVER['HTTP_ACCEPT_LANGUAGE'].$_SERVER['HTTP_USER_AGENT'].GetIP());

Du brauchst Sicherheiten wieso der Client der tatsächliche Client ist und mit diesen Funktionen erreichste etwas mehr Identifikation.
Du gleichst einfach - den nach Login erstellten Hash - bei jedem Browser-Request mit dem Hash in der Datenbank ab

Für das Suchen der header Funktionen kannste mit STRG + F die Suche schnell aufrufen und einfach so suchen

Zudem musst aufpassen, dass dein Board nicht mit Request-Floods durchgespamt wird. $_GET kann schnell inne Hose gehen. Sicher. $_POST ist genau so betroffen wegen cURL aber dennoch gehen die meisten Angriffe auf GET-Variablen.

Falls die GET-Variable einen Int enthalten soll solltest du folgende Funktion noch zusätzlich einbauen:

PHP-Code:
function CheckNum(&$n){return preg_match('/^[0-9]+$/D',$n);} 
Zudem solltest du aufjedenfall immer auf Zeichencodierungen "utf-8" setzen.

PHP-Code:
function Esc(&$h){return htmlentities($h,ENT_QUOTES,'UTF-8');} 
Keci ist offline   Mit Zitat antworten
Alt 09.06.10, 01:38   #11 (permalink)
 
Registriert seit: 04.06.10
dishix Leistung: Facit NTK
Likes: 0
Standard

Hallo,

Zitat:
Zitat von Keci Beitrag anzeigen
MD5 ist unsicher, nutz lieber SHA1
koenntest du das vielleicht begruenden? Ich weiss, dass es aufgrund des begrenzten Zeichenraums die Moeglichkeit von MD5-Kollisionen gibt, aber die gibt es bei SHA1 auch und ich habe noch nie von einem erfolgreichen Angriff in 'freier Wildbahn' gehoert. Grade bei Passwoertern ist es doch so, dass sie nur selten die Laenge eines Hashes erreichen. Die Anzahl der notwendigen Versuche um eine Kollision herbeizufuehren, ist da meines Wissens nicht geringer als bei Brute-Force. Rein rechnerisch ist sogar das Gegenteil der Fall.

Zitat:
Zitat von Keci Beitrag anzeigen
Falls die GET-Variable einen Int enthalten soll solltest du folgende Funktion noch zusätzlich einbauen:

PHP-Code:
function CheckNum(&$n){return preg_match('/^[0-9]+$/D',$n);} 

PHP-Code:
(int) $_GET['foo']; 
Ist da etwas sparsamer. http://www.entwicklerblog.net/php/ph...der-intvalfoo/

liebe Gruesse
dishix
__________________
"Wenn A für Erfolg steht, gilt die Formel A=X+Y+Z. X ist Arbeit, Y ist Muße und Z heißt Mundhalten."
Albert Einstein
dishix ist offline   Mit Zitat antworten
Alt 09.06.10, 01:44   #12 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 211
Standard

du solltest, wenn du schon mal die hashfunktion änderst, auch gleich anfangen salts zu benutzen ... es würde sich beispielsweise anbieten jedesmal wenn ein passwort neu angelegt wird, ein neues salt für dieses passwort anzulegen

eliminiert defacto die möglichkeiten passwort tabellen effizient mit rainbowtables anzugreifen
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
Alt 12.06.10, 03:08   #13 (permalink)
 
Registriert seit: 12.06.08
Keci Leistung: Addierstift
Likes: 0
Standard

@dishix

Es gab mal nen Bericht über russische Hacker, die die Leistungsfähigkeit von Grafikkarten für alle außergraphischen Berechnungen genutzt haben, MD5-Kollisionen mit inbegriffen und SHA-1 ist mit 192-Bit immernoch einbisschen sicherer.

http://de.wikipedia.org/wiki/GPGPU

Hier mal ein Snippet für Salted Hashes:

PHP-Code:
<?php

static $salt=array(
                array(
             
'VJE§49fj=$JKVJD89?§=$VJDK(JVK787LJSK%787)DVJKJ7878§)F78JISDJKJC)§kdfkg443784',
             
'ab965d524ED9c6e38fdHJGF(§)da78884895§(%3a7e69fdDJ4679§$)%&=c7416d#b32%&erk99',
             
'5jgfjMhEE:PD\uT2w\28ZS<Tf*sa.e?zms{+25Ov`vGfY;^PVw.+q!nc98%Zhdiapu7;z%Ai#^qT',
             
'VF[T0]gCcCRapE0Q%)&Ew?f;v`?}qkq&b{[!q%0oa&te7oDV4K+(JNeLxAq`c?[R3yadn^U+H$.&'),
                array(
             
'*jnZa7UG%5T/+?bM2z3Ww7Q-fIqsBaOJR&QN8ua+}VBDkHf$78W3GoAy"<%&:?bQ>2SmRK;lnd6R',
             
'K2m/wAK)n*7e(}`==gwQ+DvXO8M9*f`73(YTy^/{<QtBgjO^*OcHm2q1BMAoGVn!QkN+%}BAJ}<5',
             
'z!=fnWm%51Mn]6LffC7c$XBU9bVsG{g)}@9y;sdkOEhKx=us+O{Ki?aYEo8>KYWwI>C,BkXcUs^I',
             
'97Q[d\CzS`=5r{u.fDmwnrDZN*0hxN/.,X;FDGIGYEQC)=4O@3O=qp]q$c1=>qCFbb}P$O<*oIm1')
             );
function 
GenSaltedHash($foo){ global $salt;
  
$rnd0=mt_rand(0,count($salt[0])-1);
  
$rnd1=mt_rand(0,count($salt[1])-1);
  return 
sha1($salt[0][$rnd0].$foo.$salt[1][$rnd1]);
}          

function 
CheckSaltedPW($loginpw,$salteddbpw){ global $salt;

  
$rounds=pow(count($salt[0]),count($salt[1]));

    for(
$i=0;$i<$rounds -1;++$i){

      
$rnd0=mt_rand(0,count($salt[0])-1);
      
$rnd1=mt_rand(0,count($salt[1])-1);
      
      
$rndsha1($salt[0][$rnd0].$loginpw.$salt[1][$rnd1]);
      if(
$salteddbpw===$rnd)return 1;
      
      unset(
$rnd);
    }
    return 
0;
}
echo 
'Erstelle Salted SHA-192 Hash: '.GenSaltedHash('kp');
echo 
'<br />';
echo 
'&Uuml;berpr&uuml;fe den SaltedHash mit dem PW von der Datenbank: '.(CheckSaltedPW('kp','04d2ae37fd8705366d1e4fc77049df2507bc9796')?'Richtiges PW':'Falsches PW');
?>
Keci ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » Meine Foren software
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 sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61