WYSIWGY (Opgelost)
ArcanA - 03/01/2009 19:05 (laatste wijziging 03/01/2009 19:26)
PHP beginner
Hallo,
Ik heb een soort WYSIWYG editor gemaakt..
Ik heb wel een probleem.
De leden kunnen dus berichtjes naar elkaar verzenden enzovoort, Zodra ze hun berichtje verzonden hebben komt het dus in de database met de codes van de WYSIWYG.
Als de ontvanger het bericht leest dat de verzender verstuur heeft word het gewoon opgehaald uit de database, alleen dat ze enkel de codes zo zoals ze in de database worden gepompt..
Vb:
Ik zie geen VET
Maar de code ervan..
Versturen
elseif($_GET['actie'] == 'versturen')
{
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$sql = "SELECT * FROM gebruikers WHERE login='".$_POST['ontvanger']."'";
$query = mysql_query($sql) or die(mysql_error());
if(empty($_POST['ontvanger']))
{
echo 'Geen ontvanger ingevuld.';
}
elseif(empty($_POST['onderwerp']))
{
echo 'Geen onderwerp ingevuld.';
}
elseif(empty($_POST['bericht']))
{
echo 'Geen bericht ingevuld.';
}
elseif(mysql_num_rows($query) == 0)
{
echo 'Ontvanger bestaat niet.';
}
else
{
$array = mysql_fetch_assoc($query);
$sql2 = "INSERT INTO berichten (afzender_id,ontvanger_id,onderwerp,bericht,gelezen,tijd,map) VALUES ('".$id."','".$array['id']."','".mysql_real_escape_string($_POST['onderwerp'])."','".mysql_real_escape_string(RemoveXSS($_POST['bericht']))."','0','".time()."','0')";
$query2 = mysql_query($sql2);
echo 'Bericht verstuurd.';
}
}
elseif ( $_GET [ 'actie' ] == 'versturen' )
{
if ( $_SERVER [ 'REQUEST_METHOD' ] == 'POST' )
{
$sql = "SELECT * FROM gebruikers WHERE login='" . $_POST [ 'ontvanger' ] . "'" ;
if ( empty ( $_POST [ 'ontvanger' ] ) ) {
echo 'Geen ontvanger ingevuld.' ; }
elseif ( empty ( $_POST [ 'onderwerp' ] ) ) {
echo 'Geen onderwerp ingevuld.' ; }
elseif ( empty ( $_POST [ 'bericht' ] ) ) {
echo 'Geen bericht ingevuld.' ; }
{
echo 'Ontvanger bestaat niet.' ; }
else
{
$sql2 = "INSERT INTO berichten (afzender_id,ontvanger_id,onderwerp,bericht,gelezen,tijd,map) VALUES ('" . $id . "','" . $array [ 'id' ] . "','" . mysql_real_escape_string ( $_POST [ 'onderwerp' ] ) . "','" . mysql_real_escape_string ( RemoveXSS
( $_POST [ 'bericht' ] ) ) . "','0','" . time ( ) . "','0')" ; echo 'Bericht verstuurd.' ; }
}
bericht bekijken:
elseif($_GET['actie'] == 'bekijken' and is_numeric($_GET['id']))
{
$sql = "SELECT * FROM berichten WHERE id ='".$_GET['id']."' AND ontvanger_id='".$id."'";
$query = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($query) == 0)
{
echo 'Dit bericht is niet van jou.';
}
else
{
$array = mysql_fetch_assoc($query);
if($array['gelezen'] == 0)
{
$sql2 = "UPDATE berichten SET gelezen='1' WHERE id='".$_GET['id']."'";
$query2 = mysql_query($sql2);
}
echo '<table width="100%" border="1">
<tr>
<td colspan="2">Bericht bekijken</td>
</tr>
<tr>
<td width="50%">Afzender</td>
<td><a href="profiel.php?id='.$array['afzender_id'].'">'.gebruiker($array['afzender_id']).'</a></td>
</tr>
<tr>
<td>Onderwerp</td>
<td>'.$array['onderwerp'].'</td>
</tr>
<tr>
<td colspan="2">'.$array['bericht'].'</td>
</tr>
<tr>
<td colspan="2"><a href="berichten.php?map='.$array['map'].'">Terug naar map</a> | <a href="berichten.php?actie=versturen&id='.$array['id'].'">Beantwoorden</a> | <a href="berichten.php?actie=verwijderen&id='.$array['id'].'">Verwijderen</a></td>
</tr>
</table>';
}
}
else
{
elseif ( $_GET [ 'actie' ] == 'bekijken' and
is_numeric ( $_GET [ 'id' ] ) ) {
$sql = "SELECT * FROM berichten WHERE id ='" . $_GET [ 'id' ] . "' AND ontvanger_id='" . $id . "'" ;
{
echo 'Dit bericht is niet van jou.' ; }
else
{
if ( $array [ 'gelezen' ] == 0 )
{
$sql2 = "UPDATE berichten SET gelezen='1' WHERE id='" . $_GET [ 'id' ] . "'" ;
}
echo '<table width="100%" border="1"> <tr>
<td colspan="2">Bericht bekijken</td>
</tr>
<tr>
<td width="50%">Afzender</td>
<td><a href="profiel.php?id=' . $array [ 'afzender_id' ] . '">' . gebruiker( $array [ 'afzender_id' ] ) . '</a></td>
</tr>
<tr>
<td>Onderwerp</td>
<td>' . $array [ 'onderwerp' ] . '</td>
</tr>
<tr>
<td colspan="2">' . $array [ 'bericht' ] . '</td>
</tr>
<tr>
<td colspan="2"><a href="berichten.php?map=' . $array [ 'map' ] . '">Terug naar map</a> | <a href="berichten.php?actie=versturen&id=' . $array [ 'id' ] . '">Beantwoorden</a> | <a href="berichten.php?actie=verwijderen&id=' . $array [ 'id' ] . '">Verwijderen</a></td>
</tr>
</table>' ;
}
}
else
{
Weten jullie meer?
Mvg,
ArcanA
7 antwoorden
Gesponsorde links
Martijn - 03/01/2009 19:30
Crew PHP
wat doet die RemoveXSS()?
ArcanA - 03/01/2009 20:07 (laatste wijziging 03/01/2009 23:34)
PHP beginner
function RemoveXSS($val)
{
$val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', '', $val);
$search = 'abcdefghijklmnopqrstuvwxyz';
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$search .= '1234567890!@#$%^&*()';
$search .= '~`";:?+/={}[]-_|\'\\';
for ($i = 0; $i < strlen($search); $i++) {
$val = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
$val = preg_replace('/(�{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
}
$ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
$ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
$ra = array_merge($ra1, $ra2);
$found = true;
while ($found == true) {
$val_before = $val;
for ($i = 0; $i < sizeof($ra); $i++) {
$pattern = '/';
for ($j = 0; $j < strlen($ra[$i]); $j++) {
if ($j > 0) {
$pattern .= '(';
$pattern .= '(&#[xX]0{0,8}([9ab]);)';
$pattern .= '|';
$pattern .= '|(�{0,8}([9|10|13]);)';
$pattern .= ')*';
}
$pattern .= $ra[$i][$j];
}
$pattern .= '/i';
$replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2);
$val = preg_replace($pattern, $replacement, $val);
if ($val_before == $val) {
$found = false;
}
}
}
return $val;
}
function RemoveXSS( $val )
{
$val = preg_replace ( '/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/' , '' , $val ) ;
$search = 'abcdefghijklmnopqrstuvwxyz' ;
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ;
$search .= '1234567890!@#$%^&*()' ;
$search .= '~`";:?+/={}[]-_|\' \\';
for ($i = 0; $i < strlen($search); $i++) {
$val = preg_replace(' / ( & #[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
$val = preg_replace ( '/(�{0,8}' . ord ( $search [ $i ] ) . ';?)/' , $search [ $i ] , $val ) ; // with a ; }
$ra1 = Array ( 'javascript' , 'vbscript' , 'expression' , 'applet' , 'meta' , 'xml' , 'blink' , 'link' , 'style' , 'script' , 'embed' , 'object' , 'iframe' , 'frame' , 'frameset' , 'ilayer' , 'layer' , 'bgsound' , 'title' , 'base' ) ; $ra2 = Array ( 'onabort' , 'onactivate' , 'onafterprint' , 'onafterupdate' , 'onbeforeactivate' , 'onbeforecopy' , 'onbeforecut' , 'onbeforedeactivate' , 'onbeforeeditfocus' , 'onbeforepaste' , 'onbeforeprint' , 'onbeforeunload' , 'onbeforeupdate' , 'onblur' , 'onbounce' , 'oncellchange' , 'onchange' , 'onclick' , 'oncontextmenu' , 'oncontrolselect' , 'oncopy' , 'oncut' , 'ondataavailable' , 'ondatasetchanged' , 'ondatasetcomplete' , 'ondblclick' , 'ondeactivate' , 'ondrag' , 'ondragend' , 'ondragenter' , 'ondragleave' , 'ondragover' , 'ondragstart' , 'ondrop' , 'onerror' , 'onerrorupdate' , 'onfilterchange' , 'onfinish' , 'onfocus' , 'onfocusin' , 'onfocusout' , 'onhelp' , 'onkeydown' , 'onkeypress' , 'onkeyup' , 'onlayoutcomplete' , 'onload' , 'onlosecapture' , 'onmousedown' , 'onmouseenter' , 'onmouseleave' , 'onmousemove' , 'onmouseout' , 'onmouseover' , 'onmouseup' , 'onmousewheel' , 'onmove' , 'onmoveend' , 'onmovestart' , 'onpaste' , 'onpropertychange' , 'onreadystatechange' , 'onreset' , 'onresize' , 'onresizeend' , 'onresizestart' , 'onrowenter' , 'onrowexit' , 'onrowsdelete' , 'onrowsinserted' , 'onscroll' , 'onselect' , 'onselectionchange' , 'onselectstart' , 'onstart' , 'onstop' , 'onsubmit' , 'onunload' ) ;
$found = true ;
while ( $found == true ) {
$val_before = $val ;
for ( $i = 0 ; $i < sizeof ( $ra ) ; $i ++ ) { $pattern = '/' ;
for ( $j = 0 ; $j < strlen ( $ra [ $i ] ) ; $j ++ ) { if ( $j > 0 ) {
$pattern .= '(' ;
$pattern .= '(&#[xX]0{0,8}([9ab]);)' ;
$pattern .= '|' ;
$pattern .= '|(�{0,8}([9|10|13]);)' ;
$pattern .= ')*' ;
}
$pattern .= $ra [ $i ] [ $j ] ;
}
$pattern .= '/i' ;
$replacement = substr ( $ra [ $i ] , 0 , 2 ) . '<x>' . substr ( $ra [ $i ] , 2 ) ; if ( $val_before == $val ) {
$found = false ;
}
}
}
return $val ;
}
Sander1993 - 03/01/2009 20:18
PHP interesse
ik heb sowieso al 1 fout gevonden:
$search .= '~`";:?+/={}[]-_|\'\\';
$search .= '~`";:?+/={}[]-_|\' \\';
moet worden:
$search .= '~`";:?+/={}[]-_|\'\';
$search .= '~`";:?+/={}[]-_|\' \';
of
$search .= '~`";:?+/={}[]-_|\'\\'';
$search .= '~`";:?+/={}[]-_|\' \\'' ;
Martijn - 03/01/2009 20:27 (laatste wijziging 03/01/2009 20:31)
Crew PHP
je middelste niet kijk maar naar de ;, je escaped nu de ' die m zou moeten sluiten
onderste ook niet
$search .= '~`";:?+/={}[]-_|\'\\'';
$search .= '~`";:?+/={}[]-_|\' \\'' ;
moet zijn
$search .= '~`";:?+/={}[]-_|\'\\';
$search .= '~`";:?+/={}[]-_|\' \\';
die had een ' teveel
nog een edit: de tags geeft m niet goed weer of ligt dat aan mij?
nog een nog een edit: lol, en ik zie dat dat dus is wat ie heeft, dus helemaal geen fout
DenMette - 04/01/2009 10:06 (laatste wijziging 04/01/2009 14:57)
PHP gevorderde
vanaf dat er een attribuut in de tag komt te staan, dan zal RemoveXSS hier iets doen wat hij niet zou mogen doen.
Dit
<a href='blabla'>Hello</a> Hoe gaat het?? <b style='font-weight:normal'>Dit moet vet staan</b>
< a href= 'blabla' > Hello</ a> Hoe gaat het?? < b style= 'font-weight:normal' > Dit moet vet staan</ b>
Wordt
<a href='blabla'>Hello</a> Hoe gaat het?? <b st><x>yle='font-weight:normal'>Dit moet vet staan</b>
< a href= 'blabla' > Hello</ a> Hoe gaat het?? < b st>< x> yle= 'font-weight:normal' > Dit moet vet staan</ b>
De style attribuut en nog andere accepteert removexss niet omdat je hier ook vreemde zaken mee kan krijgen. Het is iets heel goed, maar ik zou het niet gebruiken omdat je op veel zaken gaat moeten letten.
de <x> wordt toegevoegd op lijn 35. En op lijn 15 staat de style attribuut dat jij moet gaan weg doen.
Er is nog wat fout in het algemeen met de code. Hier is de verbeterde versie die op het net te vinden is
Plaatscode: 64550
Gesponsorde links
Dit onderwerp is gesloten .