• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Webprojekt | Fragen zum Aufbau | php-Umsetzung

Phibedy

Neues Mitglied
Guten Abend,
Ich bin mir unsicher, ob dieser Beitrag in den php Bereich gehört, falls ein anderer Überbegriff besser dazu passt, bitte ich dieses Thema zu verschieben und entschuldige mich schonmal dafür :).

Ich bin gerade dabei mit meinen noch nicht allzu großen html/php/js/msql Kenntnissen ein kleines Webkonzept zu erstellen. Ich möchte es später nutzen/ vorallem mich daran spielen und es immer weiter entwickeln, es geht mir nicht darum, dass non+ultra zu erstellen sondern dabei etwas zu lernen und eben meinen Spaß dabei zu haben.

Was bis jetzt funktioniert:
User können sich registrieren, per email verifizieren, bekommen eine Gruppe zugewiesen.
Können in ein Gästebuch schreiben, ein paar kleine Seiten mit java-applets und svg-spaß.

Was noch dazu kommen soll:
das css, bis jetzt "kein" Layout vorhanden. Zumindestens kein Layout, dass sich Layout nennen darf.
ein kleines Forum
einen Blog + Kommentarfunktion
persönliche Nachrichten / Freundesliste
Punktezähler bei Spielen
eine Cloud, zunächst nur für bestimmte Leute
ein Downloadbereich für alle
usw.

Nun ein paar Fragen:
1. Wie setzt man am besten die Zugriffsrechte auf bestimmte html/sonstige Objekte? D.h. einer in Gruppe "Mitglied" soll nicht in den "Adminbereich" schaun können, nicht alle blogs lesen können, nicht alle downloads nutzen usw. Ist es sinnvoll, vor jedem link eine solche Abfrage zu schreiben, im Sinne von
Code:
 if(hasright()){ show...}else {...}
Gibt es dazu eine schönere Lösung, z.B. über xml?, oder wie kann man das am besten mit php umsetzen? Ich habe dabei bedenken, da wenn ich ein html-tag nicht aufrufe, verschiebt sich das layout.

2. Die Gruppen haben bei mir die iDs 0; 1; 2; 3; 4; usw.. Sollte man von eine rangordnung erstellen, d.h. Gruppe 2 sehen auch alles, was Gruppe 1; 2 auch sehen oder sollte man jeder Gruppe einen eigenen Berechtigungsstatus geben? Ich weiss, dass es von Fall zu Fall unterschiedlich ist, jedoch könnt ihr doch bestimmt aus Erfahrung sprechen :)

3. Benutzt man dafür am besten eine Datenbank mit vielen Tabellen oder sollte man Forum / Spielestatistik /Allgemeine_Useranmeldung in verschiedene Datenbanken unterteilen?

liebe Grüße Phibedy
 
1. Wie setzt man am besten die Zugriffsrechte auf bestimmte html/sonstige Objekte? D.h. einer in Gruppe "Mitglied" soll nicht in den "Adminbereich" schaun können, nicht alle blogs lesen können, nicht alle downloads nutzen usw. Ist es sinnvoll, vor jedem link eine solche Abfrage zu schreiben, im Sinne von
Code:
if(hasright()){ show...}else {...}
Gibt es dazu eine schönere Lösung, z.B. über xml?, oder wie kann man das am besten mit php umsetzen? Ich habe dabei bedenken, da wenn ich ein html-tag nicht aufrufe, verschiebt sich das layout.
Das Ganze muss auf dem Server gelöst werden wenn du es wirklich richtig machen willst. In dem Sinne liegst du mit den "If"-Abfragen von der Art her richtig. Oder du machst bereits wenn du eine Seite aufrufst in der ersten Zeile eine Abfrage ob die Gruppe stimmt und wenn nicht wird er per header('') oder Fehlermeldung darauf hingewiesen und nichts dargestellt (php-Datei). Ist es innerhalb einer Datei nur ein Block, dann ist ein If-Statement der richtige Lösungsansatz.
Willst du das Ganze als Design Pattern umsetzen, kann ich dir MVC empfehlen:
Model View Controller
The Model-View-Controller (MVC) Design Pattern for PHP

2. Die Gruppen haben bei mir die iDs 0; 1; 2; 3; 4; usw.. Sollte man von eine rangordnung erstellen, d.h. Gruppe 2 sehen auch alles, was Gruppe 1; 2 auch sehen oder sollte man jeder Gruppe einen eigenen Berechtigungsstatus geben? Ich weiss, dass es von Fall zu Fall unterschiedlich ist, jedoch könnt ihr doch bestimmt aus Erfahrung sprechen
Wie du es gliedern möchtest. Es ist natürlich in einem klassischen System logisch, dass jeder höhere alles von den niederen Rängen sehen kann PLUS seine Berechtigungsebene (größer, kleiner Abfragen bei Zahlen). Allerdings stelle man sich mal folgendes Beispiel vor: Es gibt eine Gruppe A, die intern geschlossen diskutieren möchte und die internen Inhalte mit dem Gruppenleiter A ausgetauscht werden. Der Gruppenleiter B wäre logischerweise auf dergleichen Restriktionsebene wie Gruppenleiter A dennoch soll er nicht alle internen Dokumente der Gruppe A sehen. Es kommt somit auf den jeweiligen Anwendungsfall an. Frage soweit beantwortet?

3. Benutzt man dafür am besten eine Datenbank mit vielen Tabellen oder sollte man Forum / Spielestatistik /Allgemeine_Useranmeldung in verschiedene Datenbanken unterteilen?
Ich würde prinzipiell eine Datenbank mit vielen Tabellen vorschlagen sofern du in MySQL oder ähnlichem arbeitest. Fälle, in denen mehrere Datenbanken ratsam sind, sind für "Standard"-Anwendungen eher selten.
 
Danke, werde ich mir gleich mal genauer ansehen :)
Habe zwei weitere Fragen.
1. Ich spiele mich auf der Seite mit svg, diese gebe ich mit dem echo befehl von php aus. Da es extrem viele kleine objekte drin sind, kann ich sie schlecht zerlegen und in die session speichern. Serialisieren kann man sie auch nicht, da man einen leeren Baum erhält. Bis jetzt erstelle ich eine temp- datei auf dem server und lösche sie dann, aber irgendwie gefällt mir das nicht besonders. Ich würde sie gerne ohne eine Datei zu schreiben ablegen.
Ich habe mir hierfür den quellcode von: XSLT Tryit Editor v1.0
angesehen, allerdings verstehe ich nicht ganz, wie sie diesen Text an die nächste Seite übergeben.
Ich habe mir überlegt, das xml per Post weiterzureichen, allerdings wäre es dann ein leichtes diese zu manipulieren. Wenn man dann echo "post" ausführt könnte dies doch übel enden oder täusche ich mich?
Würde ich dieses Problem (falls es eins ist) umgehen, wenn ich auf der nächste Seite die "post" xsl-transformieren lassen würde?

2. Eine weitere kleine Sicherheitsfrage, ich weiss, dass man Eingabefelder usw. auf gewisse Zeichen überprüfen muss. Ich habe mir dazu einiges über injections usw. durchgelesen, aber wie es bei einem Anfänger nunmal ist, ist mir nicht alles klar geworden :)
--
Bei
Code:
<form method="post" action="svg.php?page=<?php echo $_GET["page"]+1; ?>">
    <input type="submit" value="Next Step" />
</form>
Ist es möglich über das page attribut php/javascript code auszuführen? Ich habe es ausprobiert und nicht hinbekommen. Das könnte aber auch an der Syntax liegen, die mir in diesem Fall nicht ganz klar is.
--
Bei einfach geschriebenen Blogs ist es möglich über den login per sql injection hinein zu kommen. Das funktioniert meines Wissens durch ein sql-oder im passwort-feld.
Code:
$user = strtolower($_POST["user"]);
        $password = md5($_POST["password"]);
//...
$inq = "SELECT id FROM user WHERE name = '$user' AND password = '$password' AND status = '1'";
Dadurch, dass ich $password direkt in ein hash umwandle, dürfte man über den login nicht rein kommen oder täusche ich mich dabei?
Das ein reines md5 nicht besonders ist, ist mir klar. Wurde schon ausführlichst im Forum diskutiert.
--
Danke im Voraus für die Hilfe :)
 
Per unbearbeitetem Get könnte dir JavaScript-Code eingeschmuggelt werden und mit $user riskierst du SQL-Injections. Immer schon durch mysql_real_escape schicken.
 
Ist mir gerade auch aufgefallen, habe einen Nachmittag msql-befehle gelernt um meine Abfragen vernünftig zu gestallten
Code:
admin' UNION[hier kann man Unsinn machen] UNION  SELECT id FROM users WHERE '1'='1''
So kommt noch nichtmal ein error und man loggt sich direkt ein/kann dort machen, was man will.
Danke für den Tipp mit mysql_real_escape, damit funktionierts nicht mehr :)
Eine Frage dazu habe ich jedoch noch:
Codeschnipsel
Code:
$abfrage = "SELECT id FROM users WHERE name = '$user' AND password = '$password' AND status = '1'";
        ?><br /><?php
        echo $abfrage;
        ?><br /><?php
        $ergebnis = mysql_query($abfrage);
Ich verstehe nicht ganz, warum ich mit
Code:
' OR '1'='1'"; echo "OOOOO";) sleep(10); echo "'
nicht rein komme sondern ein Fehler bei der mysqlabfrage kommt. Wenn ich mir $abfrage ausgeben lasse, wird der php-code nicht ausgeführt sondern nur als String ausgegeben:
Code:
[COLOR=#000000][FONT=Times New Roman]SELECT id FROM users WHERE name = 'w' or '1'='1'"; echo "ooooo"; sleep(10); echo "'' AND password = 'd41d8cd98f00b204e9800998ecf8427e' AND status = '1'[/FONT][/COLOR][COLOR=#000000][FONT=Times New Roman]'
[/FONT][/COLOR]
Wenn ich ihn direkt einsetzte also:
Code:
$abfrage = "SELECT id FROM users WHERE name = '$post' AND password = '$password' AND status = '1'";
funktioniert es.

Mit der Get werde ich mich morgen auseinander setzen, danke für die Hilfe :)
 
Zurück
Oben