text richtig parsen

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
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.
Antworten
Nobody-66
Mitglied
Beiträge: 45
Registriert: 21.10.2009 17:52

text richtig parsen

Beitrag von Nobody-66 »

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
Nobody-66
Mitglied
Beiträge: 45
Registriert: 21.10.2009 17:52

Re: text richtig parsen

Beitrag von Nobody-66 »

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:

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);
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
Nobody-66
Mitglied
Beiträge: 45
Registriert: 21.10.2009 17:52

Re: text richtig parsen

Beitrag von Nobody-66 »

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
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: text richtig parsen

Beitrag von D@ve »

reicht echt schon das sql_escape?
Nein, Du solltest Du noch htmlentities drüberlaufen lassen um XSS zu vermeiden.

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
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: text richtig parsen

Beitrag von Pyramide »

D@ve hat geschrieben:Du solltest Du noch htmlentities drüberlaufen lassen
Das erledigt die Funktion request_var bereits.
KB:knigge
Nobody-66
Mitglied
Beiträge: 45
Registriert: 21.10.2009 17:52

Re: text richtig parsen

Beitrag von Nobody-66 »

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
0 UNION SELECT user_email as username FROM phpbb_users WHERE user_id = 2
in mein textfeld eingebe und es ans script schicke, macht er meiner meinung nach nicht das, was er solte.
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);
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
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: text richtig parsen

Beitrag von Pyramide »

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
Nobody-66
Mitglied
Beiträge: 45
Registriert: 21.10.2009 17:52

Re: text richtig parsen

Beitrag von Nobody-66 »

Pyramide 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.
verstehe leider nicht, was du meinst :oops:
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: text richtig parsen

Beitrag von D@ve »

verstehe leider nicht, was du meinst
Ich auch nicht wirklich... ;-).

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
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“