text richtig parsen
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
text richtig parsen
ich habe eine seite geschrieben, wo die user text eingeben können, welcher dann in die DB gespeichert werden soll. nun soll der ja aber sicher in die datenbank gelangen ohne das böse menschen das script "austricksen" können. bei beiträgen und PN wird das ja alles gecheckt. meine frage nun: was muss ich in mein scriptteil einfügen, damit das auch alles so sicher wird wie bei beiträgen und PN ist?
schonmal ein großes danke im vorraus für eure hilfe
schonmal ein großes danke im vorraus für eure hilfe
Re: text richtig parsen
reicht echt schon das sql_escape? den in der posting.php sind doch noch eine ganze menge mehr prüfungen, oder täusche ich mich da und die sind für was anderes?
ich habe als vorlage diesen teil vom MOD Simple Profile Comments (1.6.1) genommen gehabt:
das ganze erscheint mir aber überhaupt nicht sicher. und was in der posting. php vom forum steht ist ja eine ganze menge mehr...
auch hätte ich gerne, das die maximale zeichenanzahl überprüft wird und wenn es zu viele sind, eine fehlermeldung gibt (so wie bei den foren-beiträgen). die fehlermeldung bekomme ich selbst hin, nur weiss ich nicht, wie man es prüft
ich habe als vorlage diesen teil vom MOD Simple Profile Comments (1.6.1) genommen gehabt:
Code: Alles auswählen
// check if the comment is blank, if so trigger a error.
if(!request_var('comment_text','', true))
{
trigger_error($user->lang['BLANK_COMMENT']);
}
$time = time();
$comment_id = request_var('comment_id', 0);
$comment_poster_id = $user->data['user_id'];
$comment_author = $user->data['username'];;
$comment_text = request_var('comment_text','', true);
$comment_to_id = request_var('comment_to_id', 0);
$uid = $bitfield = $options = '';
$allow_bbcode = $allow_urls = $allow_smilies = true;
generate_text_for_storage($comment_text, $uid, $bitfield, $options, $allow_bbcode, $allow_urls, $allow_smilies);
$sql_ary = (array(
'comment_date' => $time,
'comment_id' => $comment_id,
'comment_poster_id' => $comment_poster_id,
'comment_to_id' => $comment_to_id,
'comment_author' => $comment_author,
'comment_text' => $comment_text,
'bbcode_uid' => $uid,
'bbcode_bitfield' => $bitfield,
'bbcode_options' => $options,
));
$sql = 'INSERT INTO ' . COMMENT_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary);
$db->sql_query($sql);
auch hätte ich gerne, das die maximale zeichenanzahl überprüft wird und wenn es zu viele sind, eine fehlermeldung gibt (so wie bei den foren-beiträgen). die fehlermeldung bekomme ich selbst hin, nur weiss ich nicht, wie man es prüft
Re: text richtig parsen
mal ein kleiner push....
Nobody-66 hat geschrieben:...
auch hätte ich gerne, das die maximale zeichenanzahl überprüft wird und wenn es zu viele sind, eine fehlermeldung gibt (so wie bei den foren-beiträgen). die fehlermeldung bekomme ich selbst hin, nur weiss ich nicht, wie man es prüft
- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Re: text richtig parsen
Nein, Du solltest Du noch htmlentities drüberlaufen lassen um XSS zu vermeiden.reicht echt schon das sql_escape?
Code: Alles auswählen
$string = $db->sql_escape(htmlentities($string)
$db->sql_query('INSERT INTO' . BLA_TABLE . "bt SET bt.blubb = '$string'");
There are only 10 types of people in the world: Those who understand binary, and those who don't
Re: text richtig parsen
Das erledigt die Funktion request_var bereits.D@ve hat geschrieben:Du solltest Du noch htmlentities drüberlaufen lassen
KB:knigge
Re: text richtig parsen
mal noch ein problem zu dem thema:
hier http://phpbb3.pytalhost.com/viewtopic.php?f=23&t=241 wird die SQL Injection angesprochen.
wenn ich nun
hier erstmal mein code:
wenn ich mir jetzt die abfrage "anzeigen" lasse, kommt:
SELECT * FROM phpbb_users WHERE username_clean LIKE 0 union select user_email as username from phpbb_users where user_id = 2
müsste nicht eigentlich sowas wie '0 UNION SELECT user\_email as username FROM phpbb\_users WHERE user\_id = 2' dort stehen? oder verstehe ich das wieder mal falsch?
habe leider von SQL Injection noch nicht so die ahnung, um das verlässlich zu testen, ob er es wirklich richtig "entschärft".
daher wäre ich für eure hilfe sehr dankbar
hier http://phpbb3.pytalhost.com/viewtopic.php?f=23&t=241 wird die SQL Injection angesprochen.
wenn ich nun
in mein textfeld eingebe und es ans script schicke, macht er meiner meinung nach nicht das, was er solte.0 UNION SELECT user_email as username FROM phpbb_users WHERE user_id = 2
hier erstmal mein code:
Code: Alles auswählen
$username_replace = str_replace('*', $db->any_char, utf8_clean_string($username));
# wenn bei der suche ein jocker verwendet wird, soll er ersetzt werden
$sql_where .= ($username_replace) ? 'username_clean LIKE ' . $db->sql_escape($username_replace) : '';
$sql = "SELECT *
FROM " . USERS_TABLE . "
WHERE $sql_where";
$result = $db->sql_query($sql);
SELECT * FROM phpbb_users WHERE username_clean LIKE 0 union select user_email as username from phpbb_users where user_id = 2
müsste nicht eigentlich sowas wie '0 UNION SELECT user\_email as username FROM phpbb\_users WHERE user\_id = 2' dort stehen? oder verstehe ich das wieder mal falsch?
habe leider von SQL Injection noch nicht so die ahnung, um das verlässlich zu testen, ob er es wirklich richtig "entschärft".
daher wäre ich für eure hilfe sehr dankbar
Re: text richtig parsen
Da du in deinem SQL-Spruch keine einfachen Anführungszeichen ( ' ) drin hast, tauchen die logischerweise auch nicht im Endergebnis auf. Die Variante ohne Anführungszeichen (also "... WHERE user_id = 0 ...") darf aus genau diesem Grund nur bei Zahlen verwendet werden.
KB:knigge
Re: text richtig parsen
verstehe leider nicht, was du meinstPyramide hat geschrieben:Da du in deinem SQL-Spruch keine einfachen Anführungszeichen ( ' ) drin hast, tauchen die logischerweise auch nicht im Endergebnis auf. Die Variante ohne Anführungszeichen (also "... WHERE user_id = 0 ...") darf aus genau diesem Grund nur bei Zahlen verwendet werden.

- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Re: text richtig parsen
Ich auch nicht wirklich...verstehe leider nicht, was du meinst

SQL-Injection komplett zu verhindern ist nicht ganz einfach. Ich bin bei mir gerade überlegen, ob ich meine Script auf prepared Statements umstelle. Das ist imo die einzig wirklich sichere Methode mit der man das ganz ausschließen kann.
There are only 10 types of people in the world: Those who understand binary, and those who don't