الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

حفض كود html في قاعدة البيانات mysq و عرضه باستعمال php

بدأه sghirziane في 30 مايو 2011 · 6 رد · 1,157 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لدي جدول message في قاعدة البيانات TDI :

كود الجدول :

CREATE TABLE `message` (
  `id_msg` int(10) unsigned NOT NULL auto_increment,
  `msg` text NOT NULL,
  PRIMARY KEY  (`id_msg`)
) TYPE=MyISAM COMMENT='message' AUTO_INCREMENT=1 ;

-----------------------------------------------------------------------------------------------------------------------------------------------------------

لدي صفحة send_msg.php تقوم بحفض ماكتب في textarea في جدول message في قاعدة البيانات TDI .

كود function pep_data:

function preper_data($data=""){
	$data=trim($data);
	$data=htmlentities($data);
	$data=strip_tags($data);
	$data=nl2br($data);	
	$data=mysql_real_escape_string($data);
	return $data;

}

كود الصفحة :

<?php
//connexion to mysql Database
require_once('../tdi_includes/session.php');

if(isset($_POST['submit']) && $_POST['send']=="send"){
				 	if(isset($_SESSION['idm']) && isset($_SESSION['logedin'])){
							$msg=preper_data($_POST['msg']);
							if($msg != "" && $msg!= "write an message..."){
								//insert the message into the database
								$cmd="insert into message values('','".$msg."')";
								$result=mysql_query($cmd);
								//in order to check the query
								check_result($result); 
							}
					}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" >
<title>Ecrire un Message</title>
</head>
<body>
			<form method="post" action="<?php echo $_SERVER['PHP_SELF']?>">						
						<textarea name="msg"   style="width: 430px; height: 60px" id="msg">write an message...</textarea><br>
						<input type="hidden" name="send"  value="send" >
						<input name="submit" type="submit" value="Envoyer"  class="modifier">			
			</form>
			<!-- print all messages-->
			<?php
			$cmd="select * from message order by id_msg desc";
			$result=mysql_query($cmd);
			//in order to check the query
			check_result($result); 
			if(mysql_num_rows($result) > 1){
				while($msg=mysql_fetch_array($result)){
			?>
				<div style="background:#D3E2E1">
					<?php echo $msg['msg']; ?>
				</div>
					<hr>
			<?php
				}//while
			}//if
			?>

</body>
</html>

المطلوب:

اريد طريقة لعرض كل ما يكتب في textarea في نفس الصفحة send_msg.php .

متال:

اريد حفض هدا الكود اسفله الدي كتب في textarea داخل جدول message في قاعدة البيانات TDI:

مرحبا بكم في   منتديات الفريق العربي للبرمجة

ادا كنت زائر المرجو التسجيل.

		<table>
 	<tr>
		 <td>	
			 <span style="float: right;color:#405F8C; margin:0  0 0 0">
				 <!-- supprimer le msg -->
				<a  style="" href="supp_msg.php?id_msg_rec=<?php echo $msgr['id_msg_rec'];?>" title="Supprimer ce Message">
						Supprimer
				 </a>
				    
				<!-- repondre -->	 
				 <a  style="" href="member_stufs.php?id_msg_rec=<?php echo $msgr['id_msg_rec'];?>&repondre=ok" title="Supprimer ce Message">
						Repondre
				 </a>
			</span>
		 </td>
	 </tr>
 </table>

يجب ان يعرض من جدول message في قاعدة البيانات على الشكل التالي:

مرحبا بكم في منتديات الفريق العربي للبرمجة

ادا كنت زائر المرجو التسجيل.

<table>

<tr>

<td>

<span style="float: right;color:#405F8C; margin:0 0 0 0">

<!-- supprimer le msg -->

<a style="" href="supp_msg.php?id_msg_rec=<?php echo $msgr['id_msg_rec'];?>" title="Supprimer ce Message">

Supprimer

</a>

   

<!-- repondre -->

<a style="" href="member_stufs.php?id_msg_rec=<?php echo $msgr['id_msg_rec'];?>&repondre=ok" title="Supprimer ce Message">

Repondre

</a>

</span>

</td>

</tr>

</table>

لقد تعبت من البحت و التجارب.المرجو من الاخوان المساعدة. ولكم جزيل الشكر :unsure:

send_msg.php

#2

هناك نقطتين :

- strip_tags ، ما أعرفه أنها تزيل tags ، وبالتالي شيء طبيعي أن يتم فلترة الأوسمة ، لذلك يمكن أن تجرب htmlspecialchars أو شيء شبيه بها ، بحيث عند عرض النص ، يعرض كما تم ادخاله ، ولا يتم ترجمة الأوسمة إلى HTML ..

- بالنسبة للنص الذي تريد ادخاله في textarea ، هل تريد من المستخدم أن يدخل msg_id بأن يكتب بنفسه كود php ؟ المفترض انك تتعامل مع محرر يرسل لك HTML وتقوم بتخزينه ثم عرضه ، لذلك لا يهم " ماهو النص الذي يكتبه " ، لأن في النهاية نص يتم تخزينه في قاعدة البيانات ثم عرضه .. فقط تأكد أنك تحولّ html tags إلى حروف لا يمكن للمتصفح ترجتمها على أنها HTML ..

1

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#3

السلام عليكم و رحمة الله و بركاتة

قم بحذف علامات التنصيص الموجودة و اترك فقط علامة تنصيص اول و اخر الجملة عند عملية ال insert

#4

* ملاحظة بعيدة عن صلب الموضوع لكن قد تهمّك، الكود لديك يحوي على ثغرة XSS يمكن الاستفادة منها بسبب استخدام $_SERVER['PHP_SELF'] التي يمكن للمستخدم التحكم بها.

جرب التالي، بفرض اسم الصفحة page.php

قم بوضع السلسلة التالية خلف اسم الصفحة في شريط العنوان مباشرة، مثال:

http://localhost/page.php/"><script>alert(0)</script>

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5
الشمري كتب:

هناك نقطتين :

- strip_tags ، ما أعرفه أنها تزيل tags ، وبالتالي شيء طبيعي أن يتم فلترة الأوسمة ، لذلك يمكن أن تجرب htmlspecialchars أو شيء شبيه بها ، بحيث عند عرض النص ، يعرض كما تم ادخاله ، ولا يتم ترجمة الأوسمة إلى HTML ..

- بالنسبة للنص الذي تريد ادخاله في textarea ، هل تريد من المستخدم أن يدخل msg_id بأن يكتب بنفسه كود php ؟ المفترض انك تتعامل مع محرر يرسل لك HTML وتقوم بتخزينه ثم عرضه ، لذلك لا يهم " ماهو النص الذي يكتبه " ، لأن في النهاية نص يتم تخزينه في قاعدة البيانات ثم عرضه .. فقط تأكد أنك تحولّ html tags إلى حروف لا يمكن للمتصفح ترجتمها على أنها HTML ..

:) الشكر الجزيل .قمت بتعويض htmlentities ب htmlspecialchars و اصبحت الدالة () prep_data على الشكل التالي :

function preper_data($data=""){
	$data=htmlspecialchars($data);
	$data=nl2br($data);
	$data=mysql_real_escape_string($data);	
	return $data;
}

بالنسبة لل msd_id فهو عبارة عن auto_increment.

:sleep:

شكرا للجميع :)

------------------------------------------------------------------------------------------------------------------------------------------------------------------

azhran كتب:

السلام عليكم و رحمة الله و بركاتة

قم بحذف علامات التنصيص الموجودة و اترك فقط علامة تنصيص اول و اخر الجملة عند عملية ال insert

:wacko:

صديقي azhran. عند عملية ال insert نضع علامة تنصيص عندما يكون لدينا حقل نصي كالدي احاول ادخاله تماما.ونلغيها عند العكس.

مع الشكر. تقبل مروري :)

تم تعديل هذه المشاركة بواسطة sghirziane في 31 مايو 2011 في 18:40

#6
Xacker كتب:

* ملاحظة بعيدة عن صلب الموضوع لكن قد تهمّك، الكود لديك يحوي على ثغرة XSS يمكن الاستفادة منها بسبب استخدام $_SERVER['PHP_SELF'] التي يمكن للمستخدم التحكم بها.

جرب التالي، بفرض اسم الصفحة page.php

قم بوضع السلسلة التالية خلف اسم الصفحة في شريط العنوان مباشرة، مثال:

http://localhost/page.php/"><script>alert(0)</script>

:blink:

ملاحظة مهمة .لكني لم افهم شيئا المرجو التوضيح (وضع معلومات حول تغرة xss)

:huh: mمع الشكر

#7
sghirziane كتب:

ملاحظة مهمة .لكني لم افهم شيئا المرجو التوضيح (وضع معلومات حول تغرة xss)

روابط ذات صلة:

ما معنى Cross-Site Scripting attack

http://en.wikipedia.org/wiki/Cross-site_scripting

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…