Speciale tekens worden uit formulier gehaald.

  • Onderwerp starter Onderwerp starter Nie
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Nie

Gebruiker
Lid geworden
20 aug 2012
Berichten
12
Hoi,

Ik heb dus vandaag CKeditor proberen installeren op het berichtensysteem op mijn site, alles werkt alleen worden < > etc. weggelaten.
Als ik bv als bericht dit nu typ (met ook die opmaak)

Deze tekst is vet
Mein_Eigener_Test.png

Dan krijg ik in de database opgeslagen:
pstrongDeze tekst is vet/strong/prnrnpimg alt= src=http://upload.wikimedia.org/wikipedia/commons/e/e2/Mein_Eigener_Test.png //prnrnp /p

Zoals je kan zien vallen dus < > & / weg, hoe kan ik dit oplossen?
Dit is mijn code:

PHP:
<?php

$id = $_GET["id"];

session_start(); // Starts the session.
include("config.php"); // Contains header etc.
include("header.php"); // Contains header etc.
include("menu.php"); // Contains header etc.

      $loggin = $_SESSION['logginname'];

?>

	<script type="text/javascript" src="ckeditor/ckeditor.js"></script>

<div id="container">
  <div class="wrapper">
    <h1>Send a new message</h1>
	  
	  <?php
	  
	  if (!isset($_POST['submit'])) { // If the form has not been submitted.
		  
		  ?>
	 <tr>
<td valign="top"><center>
<form method="post" action="sendpm.php"  enctype="application/x-www-form-urlencoded">
	<table>
		<tr>
			<td>
				Subject:
			</td>
			<td>
				<input type="text" name="subject" value="Subject">
			</td>
		</tr>
		<tr>
			<td>
				To:
			</td>
			<td>
				<input type="text" name="to" value="To">
			</td>
		</tr>
		<tr>
			<td>
				Message:
			</td>
			<td>
				<textarea name="bericht" id='bericht' ROWS="25" COLS="50">Vul hier uw gewenste tekst in. Er moeten HTML-codes gebruikt worden voor de opmaak.</textarea>
			</td>
		</tr>
	</table>
	<script type="text/javascript">
				CKEDITOR.replace( 'bericht' );
			</script>
   	<input type="submit" name="submit" value="Submit">
</form>
</table>
</td>
          </tr>
          </table></td>
      </tr>
    </table></td>
  </tr>
	  
	  <?php
	  }else{
		  
		  $bericht = form($_POST['bericht']);
		  $subject = form($_POST['subject']);
		  $to = form($_POST['to']);
		  
		  // Ik denk dat het hier ergens foutloopt
		  
		$postArray = &$_POST ;			// 4.1.0 or later, use $_POST

foreach ( $postArray as $sForm => $value )
{
	if ( get_magic_quotes_gpc() )
		$postedValue = htmlspecialchars( stripslashes( $value ) ) ;
	else
		$postedValue = htmlspecialchars( $value ) ;
}
		  // Einde foutlopen?
		  
		  
		  mysql_query("INSERT INTO  `chrishn5_main`.`messages` (`id` ,`from` ,`to` ,`time` ,`message` ,`status` ,`subject`)VALUES (NULL ,  '$loggin',  '$to',  '',  '$bericht',  'unread',  '$subject')") or die (mysql_error());

		  // Start mail send
		  
		  $sql_user_to = "SELECT * FROM  `users` WHERE `username` = '$to'";
          $result_user_to=mysql_query($sql_user_to); 
		  
		        $email=@mysql_result($result_user_to,$i,"email");
		  
		  $sql_message_id = "SELECT * FROM  `messages` WHERE `to` = '$to' AND `from` = '$loggin' ORDER BY id DESC";
          $result_message_id=mysql_query($sql_message_id); 
		  
		        $message_id=@mysql_result($result_message_id,$i,"id");
		

           $mail_to      = $email;
           $subject_mail = "New message received";
           $message_mail = "Hi, 
you have received a new private message from $loggin
You can view the message here :\rhttp://blabla.com/message.php?id=$message_id\r\r
If this is an error, ignore this email and you will be removed from our mailing list.\r\r
Regards, the blabla.com Team";

$headers = 'From: noreply@blabla.com' . "\r\n" .

    'Reply-To: noreply@blabla.com' . "\r\n" .

    'X-Mailer: PHP/' . phpversion();

mail($mail_to, $subject_mail, $message_mail, $headers);
		
		// Einde mail send
		  
		  ?>
	 
<p>Your message has been send!
<br>BERICHT: <?php echo $bericht;?>
<br>ONDERWERP: <?php echo $subject;?>
<br>AAN: <?php echo $to;?></p>

<?php
		  
	  } // Sluit form verzonden

?>
	  
	   </div>
</div>
	  
	  <?php


include("foot.php"); // Contains header etc.

?>

Alvast bedankt!
 
Het ligt blijkbaar niet aan ckeditor maar aan het hele formulier.
Speciale tekens zoals é @ etc. worden doorgestuurd, maar < > niet.

Ik heb echt geen idee waardoor het komt, dit is de hele code zonder ckeditor:
PHP:
<?php

$id = $_GET["id"];

session_start(); // Starts the session.
include("config.php"); // Contains header etc.
include("header.php"); // Contains header etc.
include("menu.php"); // Contains header etc.

      $loggin = $_SESSION['logginname'];

?>



<div id="container">
  <div class="wrapper">
    <h1>Send a new message</h1>
	  
	  <?php
	  
	  if (!isset($_POST['submit'])) { // If the form has not been submitted.
		  
		  ?>
	 <tr>
<td valign="top"><center>
<form method="post" action="sendpm.php"  enctype="application/x-www-form-urlencoded">
	<table>
		<tr>
			<td>
				Subject:
			</td>
			<td>
				<input type="text" name="subject" value="Subject">
			</td>
		</tr>
		<tr>
			<td>
				To:
			</td>
			<td>
				<input type="text" name="to" value="To">
			</td>
		</tr>
		<tr>
			<td>
				Message:
			</td>
			<td>
				<textarea name="bericht" id='bericht' ROWS="25" COLS="50">Vul hier uw gewenste tekst in. Er moeten HTML-codes gebruikt worden voor de opmaak.</textarea>
			</td>
		</tr>
	</table>
   	<input type="submit" name="submit" value="Submit">
</form>
</table>
</td>
          </tr>
          </table></td>
      </tr>
    </table></td>
  </tr>
	  
	  <?php
	  }else{
		  
		  $bericht = form($_POST['bericht']);
		  $subject = form($_POST['subject']);
		  $to = form($_POST['to']);
		  
		  
		  // Start
		  
		  
		  mysql_query("INSERT INTO  `chrishn5_main`.`messages` (`id` ,`from` ,`to` ,`time` ,`message` ,`status` ,`subject`)VALUES (NULL ,  '$loggin',  '$to',  '',  '$bericht',  'unread',  '$subject')") or die (mysql_error());

		  // Start mail send
		  
		  $sql_user_to = "SELECT * FROM  `users` WHERE `username` = '$to'";
          $result_user_to=mysql_query($sql_user_to); 
		  
		        $email=@mysql_result($result_user_to,$i,"email");
		  
		  $sql_message_id = "SELECT * FROM  `messages` WHERE `to` = '$to' AND `from` = '$loggin' ORDER BY id DESC";
          $result_message_id=mysql_query($sql_message_id); 
		  
		        $message_id=@mysql_result($result_message_id,$i,"id");
		

           $mail_to      = $email;
           $subject_mail = "x.com new message received";
           $message_mail = "Hi, 
you have received a new private message from $loggin on x.com
You can view the message here :\rx.com/message.php?id=$message_id\r\r
If this is an error, ignore this email and you will be removed from our mailing list.\r\r
Regards, the x.com Team";

$headers = 'From: [email]noreply@x.com[/email]' . "\r\n" .

    'Reply-To: [email]noreply@x.com[/email]' . "\r\n" .

    'X-Mailer: PHP/' . phpversion();

mail($mail_to, $subject_mail, $message_mail, $headers);
		
		// Einde mail send
		  
		  ?>
	 
<p>Your message has been send!
<br>BERICHT: <?php echo $bericht;?>
<br>ONDERWERP: <?php echo $subject;?>
<br>AAN: <?php echo $to;?></p>

<?php
		  
	  } // Sluit form verzonden

?>
	  
	   </div>
</div>
	  
	  <?php


include("foot.php"); // Contains header etc.

?>

Ligt het hieraan mischien?
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> (in header.php)
 
Laatst bewerkt:
Uhm sorry maar wat bedoel je?
Code hierboven bevat alles over het formulier.

Alvast bedankt dat je me verder wil helpen.

EDIT: Je bedoelt deze lijnen? Komt nog van oude code met ckeditor.
PHP:
$bericht = form($_POST['bericht']);
$subject = form($_POST['subject']);
$to = form($_POST['to']);

Als ik ze vervang door:
PHP:
$bericht =$_POST['bericht'];
$subject =$_POST['subject'];
$to = $_POST['to'];

Dan worden mijn < & > meegestuurd! Bedankt! Nu probeer ik er weer ckeditor op te krijgen.
 
Laatst bewerkt:
Ik bedoel hoe die functie eruit ziet, wat doet die functie nu? ergens op jou pagina of in jouw include moet de functie form staan.

Als je het nu zo doet zo als je het met je ene laatste post laat zien is jouw script helemaal niet beveiligd tegen SQL injecties en cross site scripting (als je die form weglaat).
 
Die functie bestaat gewoon niet! Ik heb momenteel nog geen enkele zelfgeschreven functie in mijn site.
Door de gegevens door een functie te halen die niet bestaat vielen > & < dus weg denk ik.

En ik zal eens een tutorial over SQL injecties & cross site scripting lezen ;)
 
Na mij weten (en even gezocht op php.net) bestaat er geen form functie, dus die moet toch egt door jou gemaakt zijn anders zou je daarop errors krijgen.

Kan zijn dat de functie op een andere pagina staat (config.php, header.php of menu.php)

zou er ongeveer als zoiets uit zien.
PHP:
function form($input){
     //Doet wat met $input
    return $input
}
 
Die functie zit waarschijnlijk in 1 van de bestanden van ckeditor. Maar integratie van ckeditor werkt ook zonder die functie, raar.
De functie zit niet in 1 van die 3 opgenoemde bestanden.
 
Okey raar, in ckeditor ziet die in ieder geval niet er wordt daarvoor niks geïmporteerd in jou file.

Voor SQL injectie is de makkelijkste oplossing om gebruik te maken van mysql_escape_string. Maar ik zou het aanraden om gebruik te gaan maken van mysqli of pdo want mysql functie is op zijn retour en wordt in de toekomst verwijderd. Ik zou zelf gaan voor PDO met prepared statement is SQL injectie meteen uitgesloten (Hoef je geen gebruik te maken van mysql_escape_string). tutorial daarover http://net.tutsplus.com/tutorials/php/php-database-access-are-you-doing-it-correctly/.

Voor cross site scripting wordt lastiger als ckeditor ook html tags gebruikt. Normaal zou je gebruik kunnen maken van htmlentities maar dan werkt geen ene html tag meer van je bericht. Maar ik denk als je de documentatie van ckeditor of op het forum zoekt er vast wel iets staat om dit te voorkomen, misschien met bb code.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan