| Thema: Anpassungen / Ideen |
| |
Also...
Erstmal Moin, Moin miteinander...
Ich hab mir Euer Script mal runtergeladen und installiert - Es ist so ziemlich genau das, wonach ich gesucht habe.
Klein, einfach und nicht zu aufgebläht.
Nun sitze ich allerdings schon ein paar Tage daran, es so anzupassen, das es für mich passt und habe so einige Anregungen / Kritik.
Das komplette Design basiert auf einem Table-Konstrukt. Okay - Das macht für mich das "händische" anpassen einfacher. Für die Designmöglichkeiten ist es aber eher abträglich.
Zumal ja eine CSS für die Syles verwendet werden. Warum diese Inkonsistenz?
Bei der Backlinkpflicht würde ich beim Eintrag nur darauf hinweisen, das eine solche besteht - Der Eintrag zwar aufgenommen wurde, aber erst freigeschaltet wird, wenn ein BL auf der Seite gefunden wird.
Ihr verwerft den Eintrag sofort und vergrätzt Euch damit potentielle Linpartner. Warum?
Ich gehe sogar noch einen Schritt weiter und Liste die Einträge ohne BLim Katalog, allerdings rel=nofollow - Das nervt und motiviert zum Backlinking...
Mit dem automatischen PR-Check wäre ich vorsichtig. Aber muss jeder wissen. Ich hab das aus dem Quellcode rausgeworfen. Google hat automatisierte Abfragen gar nicht gern und das könnte dem eigentlichen Zweck dieses Scriptes hier zuwiderlaufen
Das Captcha sollte keine 1 (eins), l (kleines L) und I (grosses I) erzeugen
Die Verwechselungsgefahr ist enorm.
Damit sind wir schon beim nächsten:
Tippe ich das Captch falsch ab oder mache einen Fehler im Forular kann ich zwar auf "Zurück" klicken - Finde dann aber (MacOS - Firefox) ein leeres Formular wieder.. Heul!
Das macht keiner zweimal mit...
Mitunter wird aus unerfindlichen Gründen ein Eintrag nicht in der Datenbank durchgeführt. Ohne Fehlermeldung. Das geht nicht!
Ausserdem ist die schnöde "Eintrag angenommen" Mitteilung doch etwas dröge, oder?
Ich hab bei mir mal den ganzen Katalog auf UTF-8 umgestellt und seit dem keine Fehler mehr beim Eintrag gehabt. Allerdings läuft bei mir auch mysql auf UTF-8. Kann sein das es da zu inkonstistenzen beim Eintrag kam.
Der Forumlarcheck beim Eintrag in die DB ist zu wenig regide. Ihr habt z.B. das Pipe-Symbol vergessen zu mappen. Gibt bestimmt noch anderes.
Wie wäre es mit einigen Checks mehr!?
Insbesondere, wenn man sowas sieht, wird einem schon Anders:
| Zitat: |
if ($t4 == "") {
echo "$fehler_t4";
exit();
}
|
Wenn man weiss, das dahinter die Validierung (!!) einer E-Mailadresse steht, die dann 1:1 in die Tabelle "cache" der Datenbank geschrieben wird, kriegt man als Webmaster schweissnasse Hände beim Installieren dieses Verzeichniss-Scriptes....
BTW:
Warum werden die E-Mailadressen denn nach einer Freischaltung verworfen, also nicht in die "Haupt-DB" übernommen?
Muss man mit seinen Linkpartnern später nicht mehr kommunizieren? Falls mal ein Backlink wegbricht ist keine Nachfrage nötig, sondern ein direkter Rauswurf fällig?
Naja - So erhält man sich dauerhafte Freundschaften
Aber zurück zu Validierung:
Die Datenbankstruktur der Suma-SE ist öffentlich zugänglich. Steht ja im Verzeichns 1-Installation alles drin, was man braucht um die gesamte Datenbank mittels einer Super-Duper Einfachen SQL-Injection in Grund und Boden zu schiessen.
Okay .. Ich hab grade erst mit der Portierung angefangen
Normalerweise würde ich das Script jetzt vom Server löschen - Schon allein wegen der Systemanforderungen: safe_mode_off, register_globals on, open_basedir none..
Das letztere ist übrigens definitiv "not_nice", vor allem in Verbindung mit allow_url_fopen ist der Server schon so gut wie gehackt.
Ich bleib mal dran und versuche das noch etwas abzudichten..
Und: Nee,nee... Ich sag jetzt sicher nicht wo ich am rumprobieren bin:)
Viele sonnige Grüsse erstmal
vom
Harry 
|
|
|
| |
| |
hmm, ich lesen gespannt deinen Aritkel. Wir sind alle dankbar über Vorschläge die diesen Webkatalog sicherer machen. Also wenn du produktive Vorschläge hast, lass uns dran teil haben .
Schick sie zu Rene, ich denke ich wird dein verbesserungsvorschläg umgehend zum download anbieten.
vielen dank
spaci76
|
|
|
| |
| |
Wer von Euch ist eigentlich auf die Idee gekommen die mysql_result sets numerisch zu indizieren?
Also
$row[7]
anstatt
$row['backlink']
zu schreiben und das Ganze in der Admin_area so unlesbar zusammen zu pappen das man davon schlechte Laune kriegt???
Ich bin grade dabei die DB-Struktur zu erweitern (Rating, nofollow, details) und kriege hier Vögel vom ewigen Nachschlagen welche Spalte welche Nummer in welcher Tabelle hat.
Die Variablenkonvention ist auch etwas -nunja- unkonventionell??
| Zitat: |
$www_new = $row[4];
$result22 = @mysql_query("select * from verzeichnis where host = 0 order by ID desc");
while ($row11 = @mysql_fetch_row($result22)) {
$selected = "";
if ($row11[1] == $www_new) {
$selected = "selected";
}
$option .= "<option class=rubrik2 value=$row11[3] $selected>$row11[1]</option>";
$option .= get_unterkategorie_selected($row11[3], 1, $www_new);
}
|
Spassvögel

|
|
|
| |
| |
Sorry, wenn ich gestern etwas "stinkig" war..
Soll nicht wieder vorkommen ...
Ja, ich weiss auch, das man gefälligst nicht nur meckern soll..
Okay...
Also hiermal meine Lösung für das "leere Formular nach klick auf Zurück":
In die config.php ganz oben rein:
| Zitat: |
session_cache_limiter('private, must-revalidate');
session_cache_limiter();
|
Und Ruhe ist..
Bezüglich des $t4 email-checks hab ich folgendes reingeschrieben:
[quote]
if (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}$",$t4)){
echo "$fehler_t4";
exit();
}
[/quote
Mag nicht 100% Perfekt sein, aber es langt seit Jahren so ...
Nicht jede mysql/php Installation unterstützt die
mysql_real_escape_string()
Funktion, die zur Absicherung der Formulareingaben (ALLER Formulareingaben!) unbedingt eingesetzt werden sollte.
Vor jedem Insert / Update ins mysql sollte daher unbedingt zumindest ein
addslashes()
mit den Werten erfolgen.
Ausserdem bastel ich grade an einer Detailseitenansicht für die einzelnen Einträge.
Dabei ist mir aufgefallen, das meine Installtion sich gerne mal in eine infinite Loop verabschiedet, wenn man eine Seite aufruft, die es nicht geben kann.
Soll heissen: rubriken.php??www=gibtsnicht (www.deinedomain.de/gibstnicht.html)
Dann schnellt die Serverlast in ungeahnte Höhen, mysql holt sich enorm Speicher und das Script läuft bis zur max_execution_time in der php.ini.
Lustig ist das, wenn man das abwartet und dann ganz schnell hintereinander auf "Reload" hämmert.
Mein Server hat da mit -zig Apacheprozessen geantwortet, die sich um alle Ressourcen geprügelt haben - Tschüss Servie. Einfacher geht Denial-of-Service nicht.
Da musst Du nochmal bei Deine Rekursion beim abklappern der Subkategorien macht da noch etwas Ärger!?
So was ist hässlich:
up 394 days, 7:23, 1 user, load average: 45.15, 19.70, 7.63
Bis denn
Harry
|
|
|
| |
| |
Ich steh auf Selbstgespräche
In der rubriken.php ab Zeile 10 das folgende Eingefügt:
| Zitat: |
//404 - Not found Erzeugen
$num = mysql_num_rows($result);
if ($num <> 1) { // Keiner oder mehr als ein Eintrag wurde gefunden. Fehler!!!
header("HTTP/1.0 404 Not Found");
echo"<html>
<head><title>Nicht gefunden</title></head>
<body>
<h1>404! - Dokument nicht gefunden</h1>
<p>
Das von Ihnen aufgerufene Dokument wurde auf diesem Server nicht gefunden.<br>
</p>
</body>
</html>";
exit();
}
|
und schon hat der arme Webmaster keine Probleme mehr mit wildlaufenden Scripten.
BTW:
Wenn bei einer nicht vorhandenen Seite (DB-Eintrag) kein 404 Header erzeugt wird, geht G von einem existierenden Dokument aus. Kann man sich vorstellen was da im laufe der Zeit mit de Ranking passiert. Von wegen SUMA freundlich....
CYA
Harry
|
|
|
| |
| |
Hi Harry,
erstmal danke für die hilfreichen Hinweise und Anregungen und willkommen hier im Forum.
Das die Software noch ein paar (kleinere) Makel hat, möchte ich nicht bestreiten.
Habe diese im Rahmen einer Studienarbeit erstellt, wobei ich sie dennoch Schritt für Schritt weiter verbessern möchte, auch mit Hilfe der User, also quasi als OpenSource Projekt.
Auch wenn die Software noch einer Weiterentwicklung bedarf, ist sie gegenüber vergleichbaren kommerziellen Produkten sicherlich im Vorteil, besonders in punkto Anpassung und Übersichtlichkeit, was sicherlich auch die weniger mit .php etc. vertraute User zu schätzen wissen.
Über kurz oder lang soll es trotzdem die beste Software werden 
|
|
|
| |
| |
| Harry hat folgendes geschrieben: |
| Zitat: |
//404 - Not found Erzeugen
$num = mysql_num_rows($result);
if ($num <> 1) { // Keiner oder mehr als ein Eintrag wurde gefunden. Fehler!!!
header("HTTP/1.0 404 Not Found");
echo"<html>
<head><title>Nicht gefunden</title></head>
<body>
<h1>404! - Dokument nicht gefunden</h1>
<p>
Das von Ihnen aufgerufene Dokument wurde auf diesem Server nicht gefunden.<br>
</p>
</body>
</html>";
exit();
}
|
|
Hallöchen,
als begeisterter Suma-Webkatalog-Anwender lese ich Harrys Beiträge natürlich mit gemischten Gefühlen. einerseits fasziniert mich halt die einfache Anwendung und Handhabung von Rene's Script, andrerseits sind Sicherheitslücken natürlich nicht unbedingt "das Gelbe vom Ei"
Nun finde ich es super von Harry, dass er hier, offentlichtlich selbstlos, nicht nur meckert, sondern auch konstruktive Änderungsvorschläge macht.
Hier stellt sich für mich aber jetzt die Frage, inwiefern dass, was Harry da von sich gibt auch wirklich "Hand und Fuss" hat, denn ich als Php-Looser kann nicht nachvollziehen, ob nicht sogar zusätzliche Schlupflöcher geschaffen werden, wenn ich seine Vorschläge befolge.
Von daher wäre es nicht schlecht, wenn Du Rene, die hier veröffentlichten Code-Schnipsel quasi zertifizieren könntest, einfach freigeben, dass man die dinge als Laie wirklich auch benutzen kann.
So und nun abschliessend noch ne Meldung... Wenn ich obigen Schnipsel in der rubriken.php einfüge bekomme ich folgende Fehlermeldung wenn ich auf irgendeine meiner Kategorien klicke:
| Zitat: |
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/xxxxx/www.fxxxxxxare.de/rubriken.php on line 12
Warning: Cannot modify header information - headers already sent by (output started at /home/xxxxxx/wwxxxxxre.de/rubriken.php:12) in /home/vxxxxxx/wwwxxxxxxare.de/rubriken.php on line 16
404! - Dokument nicht gefunden
Das von Ihnen aufgerufene Dokument wurde auf diesem Server nicht gefunden.
|
Was hab ich da nun falsch gemacht???
Gruss
Tagri
_________________ http://www.wir-haben.info
|
|
|
| |
| |
jupp, dafür wäre ich auch .. sodass wir eine aktuelle version mit den Korrekturen bereitstellen können.
cu
spaci76
|
|
|
| |
| |
[quote="Harry"]Sorry, wenn ich gestern etwas "stinkig" war..
Soll nicht wieder vorkommen ...
Ja, ich weiss auch, das man gefälligst nicht nur meckern soll..
Okay...
Also hiermal meine Lösung für das "leere Formular nach klick auf Zurück":
In die config.php ganz oben rein:
| Zitat: |
session_cache_limiter('private, must-revalidate');
session_cache_limiter();
|
Und Ruhe ist..
Bezüglich des $t4 email-checks hab ich folgendes reingeschrieben:
| Zitat: |
if (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}$",$t4)){
echo "$fehler_t4";
exit();
}
[/quote
Mag nicht 100% Perfekt sein, aber es langt seit Jahren so ...
Nicht jede mysql/php Installation unterstützt die
mysql_real_escape_string()
Funktion, die zur Absicherung der Formulareingaben (ALLER Formulareingaben!) unbedingt eingesetzt werden sollte.
Vor jedem Insert / Update ins mysql sollte daher unbedingt zumindest ein
addslashes()
mit den Werten erfolgen.
Ausserdem bastel ich grade an einer Detailseitenansicht für die einzelnen Einträge.
Dabei ist mir aufgefallen, das meine Installtion sich gerne mal in eine infinite Loop verabschiedet, wenn man eine Seite aufruft, die es nicht geben kann.
Soll heissen: rubriken.php??www=gibtsnicht (www.deinedomain.de/gibstnicht.html)
Dann schnellt die Serverlast in ungeahnte Höhen, mysql holt sich enorm Speicher und das Script läuft bis zur max_execution_time in der php.ini.
Lustig ist das, wenn man das abwartet und dann ganz schnell hintereinander auf "Reload" hämmert.
Mein Server hat da mit -zig Apacheprozessen geantwortet, die sich um alle Ressourcen geprügelt haben - Tschüss Servie. Einfacher geht Denial-of-Service nicht.
Da musst Du nochmal bei Deine Rekursion beim abklappern der Subkategorien macht da noch etwas Ärger!?
So was ist hässlich:
up 394 days, 7:23, 1 user, load average: 45.15, 19.70, 7.63
Bis denn
Harry
|
hi,
@harry
wenn ich das mit dem
| Code: |
session_cache_limiter('private, must-revalidate');
session_cache_limiter();
|
eintrage kommt ein:
Warning: session_start(): Cannot send session cache limiter - headers already sent
| Code: |
is die posi in der config korrekt?
danke
cu spaci76
|
|
|
|
| |
| |
Hallo Harry,
die session_cache-Geschichte klappt einwandfrei, ein echtes Plus in der Usability. Danke.
Aber das 404-Script in der rubriken.php will nicht.
Wenn ich es einbaue, kann ich keine einzige Kategorie mehr anklicken, es gibt sofort die 404-Seite zurück.
Ne Idee?
Gruß
Marco
|
|
|
| |
| |
Hi Marco,
ich hab natürlich die rubriken.php so umgebaut, das Sie mir passt.
Da ich in meinem eng begrenzten Themenkatalog keine Subrubriken verwende, muss ich darauf auch keine Rücksicht nehmen - Macht die rubriken.php aber im Header auch nicht
Gehen wir das mal in Ruhe durch:
Die .htaccess besorgt es der rubriken.php zunächst wie folgt:
| Zitat: |
RewriteEngine On
RewriteRule impressum.html impressum.php [L]
RewriteRule url-melden.html url-melden.php [L]
RewriteRule agb.html agb.php [L]
RewriteRule ^(.*).html$ rubriken.php?www=$1 [L]
|
Man beachte hierbei insbesondere das [L]...
Die Apache Foundation schreibt dazu:
| Zitat: |
last|L' (last rule)
Stop the rewriting process here and don't apply any more rewrite rules. This corresponds to the Perl last command or the break command in C. Use this flag to prevent the currently rewritten URL from being rewritten further by following rules. For example, use it to rewrite the root-path URL ('/') to a real one, e.g., '/e/www/'.
|
Wenn man das [L] also konsequent da einsetzt, wo es hingehört, spart man sich Kopfweh beim einfügen weiterer dynamischer RewriteRules später mal, z.b. für Detail-Seiten...
Werfen wir nun einen Blick auf die Source, wirk schnell klar, was passiert:
| Zitat: |
$www = explode(".", $www);
$page = $www[1];
$www = "$www[0]";
|
Okay.. hätte man eleganter machen können und bietet auch einen Ansatz zur Optimierung zum Einsatz in einer besser abgesicherten php-Umgebung ($_GET['www'] anstelle $www), aber lassen wir das hier mal da es nicht wirklich Sicherheitsrelevant erscheint. Stichwort wäre hier register_globals off, kann jeder, den es interessiert, selbst mal Googlen..
Der obige snippet macht also aus einem www.meinedomain.de/mein-tolles-thema.html
erstmal ein www.meinedomain.de/rubriken.php?www=mein-tolles-thema.html
Expoldiert die Zeichenkette in ein gleich heissendes Array ($www[])) mit dem Punkt als Trenner.
(BTW: Never ever einen Punkt in Dein Thema
$www[0] enthält dann als Wert "mein-tolles-thema" und $www[1] bekommt den wert "html" und wird der Variablen $page zugewiesen. Das kann eigentlich verworfen werden...
| Zitat: |
include "config.php";
@mysql_connect($host, $dbuser, $dbpw) or die ("Es gibt leider Probleme mit der Datenbank. <br>Bitte versuchen Sie es erneut.");
@mysql_select_db($db) or die ("Datenbank nicht vorhanden");
$result = @mysql_query("select * from verzeichnis where web='$www' order by titel asc");
|
Da schauen wir nach, ob ein Eintrag mit $www (mein-tolles-thema) in der Datenbank gefunden wird.
| Zitat: |
//404 - Not found Erzeugen
$num = mysql_num_rows($result);
|
Jetzt komm ich
Und zwar schau ich nach, wieviele Einträge gefunden wurden und lege wen WErt in $num ab.
| Zitat: |
if ($num <> 1) { // Keiner oder mehr als ein Eintrag wurde gefunden. Fehler!!!
|
Und nur dann, wenn GENAU ein Eintrag gefunden wurde, wird folgender Code NICHT ausgeführt:
| Zitat: |
header("HTTP/1.0 404 Not Found");
echo"<html>
<head><title>Nicht gefunden</title></head>
<body>
<h1>404! - Dokument nicht gefunden</h1>
<p>
Das von Ihnen aufgerufene Dokument wurde auf diesem Server nicht gefunden.<br>
</p>
</body>
</html>";
exit();
}
|
Ich denke also mal, das Du eine andere .htacess verwendest.
Dann musst Du den Code entsprechend anpassen. Sollte ja nun kein Problem mehr sein
LG Harry
Edit:
Schau mal nach, ob Du die Abfrage
$result = @mysql_query("select * from verzeichnis where web='$www' order by titel asc");
noch drin hast
Deine Fehlermeldung deutet evtl. auch auf eine Fehlreferenzierung des Result-Sets ($result) hin.
So, als wenn die Abfrage nicht gelaufen ist und es deswegen keinen Zeiger auf das Resultat gibt.
Zuletzt bearbeitet von Harry am 09.05.2007, 11:02, insgesamt einmal bearbeitet
|
|
|
| |
| |
[quote="spaci76"]
Warning: session_start(): Cannot send session cache limiter - headers already sent
| Code: |
is die posi in der config korrekt?
danke
cu spaci76
|
Bei mir schon
Du musst darauf achten, das Du keine Ausgaben an den Browser sendest, bevor Du nicht mit den headern fertig bist.
Guck mal ob Du irgendwo noch eine Leerzeile vor dem ersten
<?
in einem Dokument hast, das die config.php inkludiert.
Die von Dir angesprochene Fehlermeldung lässt darauf schliessen, dass Du irgendwo im Seitenkopf noch sowas hast...
LG
Harry
|
|
|
| |
| |
Bei mir schon
Du musst darauf achten, das Du keine Ausgaben an den Browser sendest, bevor Du nicht mit den headern fertig bist.
Guck mal ob Du irgendwo noch eine Leerzeile vor dem ersten
<?
in einem Dokument hast, das die config.php inkludiert.
Die von Dir angesprochene Fehlermeldung lässt darauf schliessen, dass Du irgendwo im Seitenkopf noch sowas hast...
LG
Harry[/quote]
ich danke
cu spaci76
|
|
|
| |
| |
 |
|