PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Regulärer Ausdruck um Scriptbereiche zu löschen (https://www.php-resource.de/forum/php-developer-forum/25577-regulaerer-ausdruck-um-scriptbereiche-zu-loeschen.html)

Novan 06-09-2003 00:49

Regulärer Ausdruck um Scriptbereiche zu löschen
 
Hi,
ich habe mal wieder nen Problem mit den ollen regulären Ausdrücken. Am Anfang denke ich immer "Das is doch bestimmt ganz leicht...reihste die Sachen aneinander und fertig" nur macht er wie eigentlich immer nicht.

Also ich habe so einen Browser WYSIWYG Editor in meine Homepage eingebaut und damit kann man dann einige Seiten erstellen und einbinden.
Da man so einen Editor aber auch dazu mißbrauchen kann PHP oder Javaskripte zu Coden will ich nach dem Absenden des Inhalts des Editors prüfen, ob solche Sachen dadrin sind und diese rauslöschen.

Gedacht habe ich es mir so (funktioniert aber nicht)
PHP-Code:

preg_replace('/(<script.+<\/script>)|(<\?php.+\?>)|(<\?.*\?>)/i','',$text); 

Kann mir wer helfen wie der lauten müßte damit Javaskripte und PHP Skripte gelöscht werden?
Vielleicht hat ja auch einer einen Ausdruck irgendwo rumfliegen der genau für diese Thematik gut ist und auch anderen Müll an den ich jetzt noch nicht gedacht habe rauskillt.

PS: Habe gerade gesehen das Forum zeigt einige \ im PHP-Code nicht an
daher pflichte ich bei, dass <? escaped ist und ?> auch jeweils. Ausserdem das </script ist auch noch escaped.

PS2: Hups falsches Forum...wie kann man seinen Beitrag löschen und woanders neu posten...?
Wenn ihn wer verschieben will nur zu

TobiaZ 06-09-2003 01:15

preg_replace('/((\<script(.+)\<\/script\> )|(\<\?php(.+)\?\> )|(\<\(.*)?\>))/i','',$text);

mal ganz dumm geraten.

Novan 06-09-2003 14:23

Hmm,
ich hab es nun geschafft die PHP Sachen aus dem Code zu löschen aber Javascript macht er immer noch nicht

PHP-Code:

$text preg_replace('/(\<\?php[^\?\>]*\?\>)|(\<\?[^\?\>]*\?\>)|(<script[^<\/script>]*<\/script>)/i','',stripslashes($HTTP_POST_VARS['ta'])); 

PS: Ist wie immer alles richtig escaped. Wir im Forum hier bloß nicht dargestellt.

TobiaZ 06-09-2003 14:41

dann poste mal im nomalen text, bzw. code

Novan 06-09-2003 14:47

Es ist zwar nur eine Testeingabe aber dort sind halt alle relevanten dinger drin die rausgelöscht werden sollen
PHP-Code:

Huhu das ist ein Test<br><br>
<?php
print 'f';
?>

Noch ein Test

<?
print 'huhu';
?>

Und nun noch Javascript

<script language="JavaScript">
<!--
alert('JavaScript');
//-->
</script>

Am Ende soll dann nur noch da stehen:
PHP-Code:

Huhu das ist ein Test<br><br>
Noch ein Test
Und nun noch Javascript 

Alles andere soll rausgelöscht werden.

TobiaZ 06-09-2003 14:58

ich mein dir regex

Novan 06-09-2003 15:01

PHP-Code:

'/(<?php[^?>]*?> )|(<?[^?>]*?> )|(<script[^</script>]*</script> )/i'

Davon funktionieren die ersten beiden Abschnitte, die sich mit php beschäftigen nur der Teil
PHP-Code:

(<script[^</script>]*</script>) 

der ja Javascriptpassagen rauslöschen soll funktioniert nicht.

TobiaZ 06-09-2003 15:02

du solltest mal als text/code posten, wegen den escapes-

Novan 06-09-2003 15:05

//
// Prüfung ob Skriptinhalte im Quelltext exestieren denn diese sind verboten.
//
$text = preg_replace('/(\<\?php[^\?\>]*\?\>)|(\<\?[^\?\>]*\?\>)|(<script[^<\/script>]*<\/script>)/i','',stripslashes($HTTP_POST_VARS['ta']));
//
// Speichern der Daten
//
$sql = 'UPDATE '.TT_TABLE.' SET
titel = "'.addslashes($HTTP_POST_VARS['titel']).'",
text = "'.$text.'"
WHERE tips_tricks_id = '.$edit_entry;

mrhappiness 06-09-2003 15:24

ich versteh deinen ausdruck nich, wozu [^<\/script>]* ?

probier mal
Code:

$text='Test1
<?php print "f"; ?>
Test2
<? print "huhu"; ?>
Test3
< script language="JavaScript">
<!--
alert("JavaScript 1");
//-->
</script>
Test4
< script language="JavaScript">
<!--
alert("JavaScript 2");
//-->
</script>
Test5
<?php
echo "Na sowas";
?>
Test6';
$pattern='%(<[ ]*\?.*\?[ ]*>)|(<[ ]*script[ ]*(.*)>.*<[ ]*/[ ]*script[ ]*>)%siU';
$text_bereinigt=preg_replace($pattern,'',$text);
echo '<xmp>'.$text.'</xmp><hr /><xmp>'.$text_bereinigt.'</xmp>';

mehr als die fragezeichen sind nich escaped

Novan 06-09-2003 15:39

Also ich habe dein Ausdruck mal probiert aber der filtert gar nichts raus weder phpcode noch javascriptcode

Also das (<script[^<\/script>]*<\/script>) soll alle Abschnitte finden, die mit <script anfangen und dannach dürfen unbegrenzt viele Zeichen kommen bloß kein </script> und das Ende soll </script> sein.

Ich habe mir das so gedacht, da es bei den beiden Abschnitten davor ja auch gefunzt hat. Also dachte ich es mir so das ich es einfach kopiere und die Zeichen tausche.

mrhappiness 06-09-2003 15:45

bei mir geht's, und damit du's mir glaubst hier ein beweis

Novan 06-09-2003 15:56

Danke....
habe das wohl etwas überstürzt getestet es läuft doch :)

Leider verstehe ich den Ausdruck nicht so wirklich. Sieht ziemlich kuriose aus. Wenn du noch Lust hast kannst du den ja mal für mich erklären. :D

mrhappiness 06-09-2003 16:01

denk dir die [ ]* mal weg, die verhindern nur dass jemand statt <script> einfach < script> schreibt

dann hast du nur noch %(<\?.*\?>)|(<script(.*)>.*</script)%siU

das sollte klar sein oder?

Novan 06-09-2003 16:08

hmm jo sieht schon viel einleuchtender aus :D

wie sieht das mit
ASP Pssagen aus? Intressieren mein Server zwar nicht weil der kein ASP unterstützt aber nur aus neugiert.
und was macht das % ist das gleich einem / für die modifier?


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:31 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG