اولا جزاك الله خيرااااااااا اخي الكريم صاحب الموضوع
طيب ما هي احسن داله للحمايه وكيفيه استخدمه
جزاكم الله خيراااااااااا اخواني
اولا جزاك الله خيرااااااااا اخي الكريم صاحب الموضوع
طيب ما هي احسن داله للحمايه وكيفيه استخدمه
جزاكم الله خيراااااااااا اخواني
__________________
ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
لطلب البرمجة فقط
helal-egypt@hotmail.com
صحيح إستخدمت هذه الداله بكثره مؤخراً ... شكراً لك.هذه الدالة تستخدم للحماية من ثغرات XXS
لا تكفي هذه الدالة لحماية المدخلات التي نريد ادراجها في قاعدة البيانات. يجب عليك استخدام mysql_real_escape_string لمعالجة البيانات قبل إدراجها في قاعدة البيانات. وإلا أصبح الكود الذي تستخدمه يحوي ثغرات SQL Injection
هذا خطأ فادح لاحظته في تطبيقاتك..
ياهلا اخوي , على ماأظن انه كل شئ وله حماية , إدخال نص موضوع للقاعده له حمايه تختلف عن إدخال رقم الهاتف والبريد مثلاً ... او إدخل وصف او الخ ...تهنا في قضية حماية المدخلات وما عدت عارف ماذا نستخدم للبوست
الجيت سهل أمره
ولكن البوست هو المشكلة الآن
كثرة المنع تخليك في النهاية تخرب المشاركة اللي كاتبها الزائر
مثل ماقلت بالأعلى , كل شئ له شئ يختلف , لديك strip_tags او addslashes او mysql_real_escape_string ... هذا مااذكره حالياًاولا جزاك الله خيرااااااااا اخي الكريم صاحب الموضوع
طيب ما هي احسن داله للحمايه وكيفيه استخدمه
جزاكم الله خيراااااااااا اخواني.
__________________
- موقع مبرّمج.
- موقع قالبي (معرض قوالب عربية و مُعربة ).
-معارض قالبي (أنشى معرضك على الإنترنت مجاناً!)
جزاك الله خيرااااااااااا اخي الكريم
طيب ممكن لو ممكن يعني تعمل داله للحمايه من كل الاخطار انا كنت عامل داله فيها كل الدوال ديه
strip_tags او addslashes او mysql_real_escape_string
بس اخ من سوالف هنا قال انها فاشله فارجو منك تعمل داله للحمايه من جميع الاخطار
فانا غيرته لكده
فهل تنفع هذه الداله للحمايهكود PHP:
function text_safe($str)
{
return addslashes( strip_tags(trim($str)));
}
__________________
ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
لطلب البرمجة فقط
helal-egypt@hotmail.com
الأخ محمدهلال
أنا شايف انك في دالتك المذكورة بتجمع جميع دوال الحماية في دالة واحدة ظنا منك انه أفضل للحماية
عندك اهم شيء في الحماية هو:
1- حماية المدخلات
وهي حماية اي شيء يتم ادخاله الى قاعدة البيانات او وضعه في استعلام
ويتم كالتالي:
في حال كان المتغير نصيكود PHP:
$var = addslashes(trim($_POST['var']));
اما في حال كنت تتوقع ان يكون المتغير رقمي، كرقم مقال او قسم مثلا، فيكفي تطبيق دالة واحدة كالتالي:
2- حماية المخرجاتكود PHP:
$var = intval($_POST['var']);
مايقلقك هنا في المخرجات ان يتم طباعة كود جافاسكريبت يحتوي على اكواد خبيثة
ولتعطيل اي اكواد جافاسكريبت او هتمل في المخرجات يكفي تمريرها في الدالة htmlspecialchars كالتالي:
طبعا ماسبق هو رأيي الشخصي ومن خلال تجاربي الشخصيةكود PHP:
echo htmlspecialchars($var);
ولا اجزم بانها الطرق الوحيدة ولكن اعتبرها آمنة بما فيه الكفاية
__________________
مدونتي
جزاك الله الف خيرااااااا اخي الكريم
يعني استخدم داله واحده فقط في حماية المدخالات صح واستخدم الداله htmlspecialchars عند طباعة المستخرجات صح؟
ممكن طلب اخي منك هو انك تعمل موضوع يكون خاص فقط بدوال عشان الاعضاء بدل ما يبحثوفي الانترنت يجدوها هنا
جزاك الله الف خير اخي الكريم
التعديل الأخير تم بواسطة محمدهلال ; 01-11-2008 الساعة 06:54 PM
__________________
ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
لطلب البرمجة فقط
helal-egypt@hotmail.com
تقبلو مروريكود PHP:
function xss_clean($val) {
// remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
// this prevents some character re-spacing such as <java\0script>
// note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
$val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', '', $val);
// straight replacements, the user should never need these since they're normal characters
// this prevents like <IMG SRC=@avascript:alert('XSS')>
$search = 'abcdefghijklmnopqrstuvwxyz';
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$search .= '1234567890!@#$%^&*()';
$search .= '~`";:?+/={}[]-_|\'\\';
for ($i = 0; $i < strlen($search); $i++) {
// ;? matches the ;, which is optional
// 0{0,7} matches any padded zeros, which are optional and go up to 8 chars
// @ @ search for the hex values
$val = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
// @ @ 0{0,7} matches '0' zero to seven times
$val = preg_replace('/(�{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
}
// now the only remaining whitespace attacks are \t, \n, and \r
$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; // keep replacing as long as the previous round replaced something
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); // add in <> to nerf the tag
$val = preg_replace($pattern, $replacement, $val); // filter out the hex tags
if ($val_before == $val) {
// no replacements were made, so exit the loop
$found = false;
}
}
}
return $val;
}
أخوي فكرة هالخطأ الشائع يقع فيه الكثيرين رغم انه اشبع حديثاً خلال الثلاث سنوات الماضية.
اذا اردت استخدام دالة addslashes لابد من التحقق من قيمة الquote magic وإلا تعارضت الدالة مع الخاصية, وعطل كل منهما الآخر.. ونفذ المخترق بجلده
والأفضل والآمن منها هي دالة mysql_real_escape_string لانه دالة addslashes بالإمكان تجاوزها عند إستخدام بعض محارف الترميز والكل يجمع أن mysql_real_escape_string هي الأفضل حالياً
صحيح كلامك اخي سعودي وشكرا على المداخلة المفيدة
ولكن لا ينصح بالاعتماد على magic quotes لاسباب منها، 1- تأثيرها على سرعة الأداء 2-وعدم الحاجة اليها في جميع المدخلات، 3- أيضاً اصدار PHP السادس قد استغنى عن هذه الخاصية
__________________
مدونتي
انت كمبرمج مالك يد في الموضوع, هذا من اعدادات السيرفر. ولكن يجب عليك قراءة القيمة المتوفرة في جميع الحالات اذا كنت تريد إستخدام addslashes هذا ما قصدت
اخي سعودي كلامك صحيح 100% ولا يوجد خلاف عليه
تحياتي لك
__________________
مدونتي
ضع في اعلي الصفحة بعد فتحة ال php
لتعطيل ال magic_quotes لو كان مفتوح علي السيرفركود PHP:
set_magic_quotes_runtime(0);
ما الفرق بين
mysql_escape_string
و
mysql_real_escape_string
الجواب
4.3.0 This function became deprecated, do not use this function. Instead, use mysql_real_escape_string().
PHP: mysql_escape_string - Manual
__________________
السيف أصدق أنباء من الكتب
تعقيبا على رد أخي المجروح هذه دالة استخدمها لعدم تعارض stripslashes مع magic_quotes
كود PHP:
function quote_smart($value)
{
$value = trim($value);
// Stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// mysql_real_escape_string to make it safe
$value = mysql_real_escape_string($value);
return $value;
}
__________________
اللهم أعز الاسلام و المسلمين
يعطيكم العافيه على المشاركات الرائعه ...
الأخ المجروح, على ماأأظن ان القصد ان mysql_real_escape_string أفضل , هذا اللي فهمته والله.
__________________
- موقع مبرّمج.
- موقع قالبي (معرض قوالب عربية و مُعربة ).
-معارض قالبي (أنشى معرضك على الإنترنت مجاناً!)
كلام سليم
كود PHP:
if(get_magic_quotes_gpc())
{
$Name = addslashes($Name);
}
وجدت هذه mysql_escape_string مستخدمه في ال vb حسب ما اذكر
عموما لحماية ال get أستخدم intvalue لما هتكون بتجيب رقم الموضوع أو التصنيف إلخ
ولما هتكون بتجيب نص مثلا do إستخدم selectcase وحدد الشروط
وأعمل ليها ديفولت بحيث لو ليست من الخيارات اللي حددتها تطلع له صفحة خطأ مثلاً ( أو حسب ما تحب ممكن تحوله علي الرئيسية )
نادرا ما نجيب من الجيت نص لعمل إستعلام عنه في القاعدة ( دائما ما يكون رقم والنص لتحديد نحن أين مثلا في صفحة المشاركة ولا التصويت ولا ولا ولا )
ولكن لو كنت هتستخدمها في الجلب إستخدم mysql_real_escape_string
بكده أنتهي أمر الجيت
أما البوست فاحميها ب mysql_real_escape_string قبل إدخالها قاعدة البيانات أو عمل إستعلام بها
لكن حينما تجلب من قاعدة البيانات وتبدأ بالعرض
كيف تحمي البيانات قبل عرضها ؟
فربما يكون بها كود جافا خطير أو شيئ ونحن دائما نجلب البيان ونعكس الأمر لنحذف الباك سلاش قبل العرض
فكيف نحمي البيان قبل عرضه للزائر ؟
__________________
السيف أصدق أنباء من الكتب