تاپيك هايي كه تو اين فروم در رابطه با اين موضوع بحث كردند خيلي بهم ريخته و ناكامل هستند. دلم مي خواد در اين تاپيك بحث registring و ورود به سايت و اعتبار سنجي كاربر به كلي تموم بشه.
Printable View
تاپيك هايي كه تو اين فروم در رابطه با اين موضوع بحث كردند خيلي بهم ريخته و ناكامل هستند. دلم مي خواد در اين تاپيك بحث registring و ورود به سايت و اعتبار سنجي كاربر به كلي تموم بشه.
براي شروع:
در كليه كد ها از ديتابيس testDB و از جدول testUSER استفاده مي كنيم.
از كليه دوستاني كه در اين مورد وارد هستند در اين بحث شركت كنند تا هم من و هم دوستاني كه در اين رابطه مشكل دارند بتونند به جواب برسند.
پيشنهاد : بهتره در اعتبار سنجي كلمه عبور از تابع md5() و توابع قوي تر رمزنگاري داده استفاده كنيم.
و همچنين ملاحظات امنيتي جهت مقابله با حملات احتمالي هكر ها هم در كدنويسي در نظر گرفته بشه.
اميدوارم دوستان همراهي كنند.
نكته: اين تاپيك فقط مخصوص php است.
از كساني هم كه آژاكس كار كردند نيز دعوت مي كنم تا اعتبار سنجي و تطبيق نام كاربري را با آژاكس انجام بديم.
براي شروع اسكريپت درجه بندي امنيت پسورد در فرم ثبت نام با تكنولوژي اي جكس:
پسورد: "www.farabit.com"کد:http://nasser2006.persiangig.com/ajaxPassSecurity.rar
از دوستان استاد در اين زمينه خواهشمندم تو اين تاپيك شركت كنند تا بتونيم سروته اين بحث رو يه جوري جمع كنيم تا ديگه نياز نشه راجع بهش تاپيك تكراري باز بشه.
از دوستان dogtag - neopersia هم دعوت دارم.
من خودم زياد وارد نيستم يعني هنوز دارم درس مي گيرم. اميدوارم با به پايان رسيدن اين تاپيك من هم بتونم يك سيستم رجيستر و عضو گيري امن براي سايتم راه اندازي كنم. البته دلم مي خواد راجع به HTTPS و SLL و امنيت پايگاه داده و php هم در رابطه با موضوع تاپيك بحث كنيم.
کاش اسم نمیبردی آخه دوستان دیگه ای هم توی انجمن هستن که تو این زمینه کار میکنن اینجوری شاید ناراحت بشن.
البته در کل فکر نمیکنم مطلب خاصی هم توی این زمینه وجود نداشته باشه ولی حالا که شروع کردید منم هستم.
میرم و سریع برمیگردم!
براي خيلي ها مثل من مهمه كه وب سايتشون داراي سيستم عضوگيري و اعتبار سنجي امن باشه. روي اين موضوع تاكيد دارم .
البته قصد من افراد بخصوصي نبود از همه دعوت دارم. اميدوارم كمكم كنين.
در ضمن از يكي خواهش دارم تا بحث رو شروع كنه.
با اجازه همه بچه ها، من اول چند نوع از انواع این سیستم رو (تقریباً شفاهی) می گم، بعد تک تک توضیح خواهیم دادشون.
1- یک سیستم تک کاربر (برای استفاده به در پنل ادمین):
برای این کار می توان تنها یک رمز عبور داشت که به 3 روش (در فایل یا در پایگاه داده یا در اصل کد)، ذخیره شود.
مثال برای فایل:
فایل password.pass دارای محتوای زیر است:
مثال برای پایگاه داده:کد:myPassword
مثلاً در جدول testUSER یک فیلد به نام password با محتوای زیر وجود دارد:
مثال برای کد:کد:myPassword
در فایل اصلی مون به این شکل وجود دارد:
[PHP]<?
$password = "myPassword";
...
?>[/PHP]
(که البته می توان همه را به صورت md5 شان قرار داد)
در این سیستم می توان به 3 صورت رمز را از کاربر دریافت کرد:
یا به صورت GET :
که باید فایل را به این صورت در براوزر باز کرد:
یا به صورت POST که باید بک فرم در صفحه وجود داشته باشد که در آن فیلدی متنی با نام pass وجود داشته باشد.کد:admin.php?pass=myPassword
یا به صورت HTTP Authentication باشه که با کد زیر میشه پسورد رو دریافت کرد:
[PHP]header('WWW-Authenticate: Basic realm="My Realm"');[/PHP]
به 3 صورت هم می توان از پسورد وارد شده استفاده کرد:
یا می توان با یک شرط (که اگر پسورد وارد شده با پسورد ذخیره شده برابر بود)، کار مطلوب را انجام داد و تمام
یا آن را با یک کوکی ذخیره کرد
یا آن را با یک سشن ذخیره کرد
2- یک سیستم چند کاربر:
برای این روش ذخیره در فایل و کد عملی نیست.
پس می ماند پایگاه داده
برای دریافت، GET هم توصیه نمی شود.
HTTP Authentication هم قیافه سایت را به هم می زند و فقط برای جاهایی با امنیت بالا مناسب است. (اگر امنیت از زیبایی خیلی مهم تر باشد)
پس می ماند POST
برای اسفاده هم عملاً نمی شود از شرط ساده استفاده کرد (می شود اما توصیه نمی شود)
کوکی هم امنیت ندارد
پس می ماند همان سشن
حالا این یک لیست خیلی ساده بود.
اگر هدف کاملاً مشخص باشد، می توان کد کامل را نوشت و روی آن توضیح داد.
با تشکر از MATRIX reloaded برای ایده قشنگشون.
**منظور شما از HTTP Authentication يعني اعتبار سنجي بوسيله خود مرورگر؟
هدف كاملا مشخصه، البته من بيشتر قصد دارم ياد بگيرم. البته در طي بحث سوال هايي هم خواهم پرسيد كه مدنظر بازديدكنندگان بدون شك خواهد بود.
بالاخره بايد سروته اين تاپيك رو جمع كنيم و بتونيم با كمك شما يك سيستم كاملا امن (عضو گيري - اعتبارسنجي - و تخصيص امكانات به كاربران) در كل يك سيستم membership كامل و بي نقص رو پياده سازي كنيم.
اين تاپيك رو براي اين ايجاد كردم كه بخاطر نداشتن دانش كافي بعضي از طراحان و برنامه نويسان ايراني (افرادي مثل من) وب سايت هاي ايراني داراي امنيت كافي نبوده و نفوذ پذيرند.
البته نمي خوام اين تاپيك به مسائل هك و ... كشيده بشه بلكه هدف فقط راه اندازي سيستم membership تمام و كمال و نفوذ ناپذير (تا حد ممكن) هست.
درر ضمن: بنده از اينترنت هاي عصر هجر استفاده مي كنم (32kbps) البته قصد خريد اينترنت adsl دارم اگه يه موقع حضور من تو تاپيك دير به دير شد منو ببخشيد..
و
از <dog></dog> هم تشكر مي كنم براي شروع خوبش
با تشكر از دوستان
بله. دقیقاًنقل قول:
**منظور شما از HTTP Authentication يعني اعتبار سنجي بوسيله خود مرورگر؟
ایشالا بچه ها 1 قدم برن جلو تر، من هم باز میام.
آخه الان نمی دونم باید دقیقاً چی رو توضیح بدم.
با اجازه من يك مثال خيلي ساده براي قسمت اول پست 6 ميزارم:
[PHP]
<?php
//administrator password md5
$adminPassword = "f62a7c27cb31760a295e7f254f3e80d2";
?>
<form action="" method="post">
<input name="pass" type="text" />
<input type="submit" />
</form>
<? if( md5($_POST['pass']) == $adminPassword) { echo "your pass word is valid." ;}
if(md5($_POST['pass']) != $adminPassword) { echo "<span style=color:red>your password is invalid.</span>";}
?>
[/PHP]
يك سوال: آيا توبع قوي تر از md5() براي رمزنگاري وجود دارد؟
يه چيزايي درباره sha1 و sha512 شنيدم. مي شه توضيح بدين؟
با تشکر از مثال.
اونها (shaX) هم خوب هسنتد ولی md5 عام تره.
شما 100% بدون که هیچ کس نمی تونه از کد md5 یه مقدار واقعی عبارت برگرده (البته میان مقدار md5 عبارت ها رو همراه با عبارت می ذارن توی 1 دیتابیس که بعداً بشه اونوری اش کرد. اما این کار، چندین سال طول می کشه.)
برای امنیت بیشتر، می تونید چند بار md5 بگیرید
[PHP]$adminPassword = md5(md5(md5(md5(md5("f62a7c27cb31760a295e7f254f3e8 0d2")))));[/PHP]
در كل يعني اگه پسورد ها با الگوريتم md5 كدگذاري بشوند هيچ راه بازگشتي وجود نداره مگر اين كه كلمه عبور را داشته باشي . عمل بازگرداندن كلمه عبور حتي براي مدير سايت كه به كل داده ها و ديتابيس دسترسي داره هم غيرممكن هست؟!
و
چطور مي شه از sha512 در php استفاده كرد؟
بله. کاملاً
اون sha1 هم مثلاً در mySQL میشه انجام داد
[PHP]mysql_query("SELECT * From testUser WHERE password = sha1($pass)");[/PHP]
نمي خواين بحث رو ادامه بدين؟! كسي نيست!
من منتظر دوستان دیگر هستم
راستشو اگه بخواين نمي خوام پست الكي بدم ولي بدون پست هم تاپيك از صفحه اول خارج مي شه. من خودم منتظر ادامه بحث هستم. <dog></dog> جان خوب شروع كرده بودي ادامه بدي ممنون مي شم.
بزارید اول ببینیم کجا هستیم و کجا باید بریم. من یه چیزایی نوشتم چک کنید اگر شرایط دیگه ای هم هست بگید تا من تو همین پست وارد کنم تا طبق اون پیش بریم وگرنه که من قسمت ثبت نام رو نوشتم بزارم توی تاپیک:
- توی سایتمون میخوایم صفحاتی داشته باشیم که فقط برای اعضای سایت قابل دسترسی باشن.
- برای اینکه اعضای سایت رو بشناسیم اعضا باید ثبت نام کنند.
- اطلاعات مربوط به اعضا که در یک جدول mysql نگهداری خواهند شد:
1. id که به صورت خودکار توسط mysql وارد جدول میشه.
2. نام کاربری که توسط کاربر در فرم ثبت نام وارد میشه.
3. کلمه عبور که توسط کاربر انتخاب شده و با متد md5 هش میشه تا قابل بازیابی نباشه.
- یک صفحه ثبت نام لازم داریم که افراد از طریق اون عضو سایت بشن.
- اسکرپت ثبت نام که بتونه در صورتی که اطلاعات کاربر قابل قبول بود اونا رو در جدول ثبت کنه.
شرایط ثبت نام رو به این صورت در نظر میگیریم:
1. نام کاربری نباید قبلاً ثبت شده باشه.
2. حداقل تعداد حروف نام کاربری و کلمه عبور باید 4 حرف باشه.
3. حداکثر طول نام کاربری و کلمه عبور باید 20 حرف باشه.
- یک فرم لوگین میخوایم تا اعضا از طریق اون وارد سایت بشن.
- اسکرپت لوگین که نام کاربری رو از صفحه ثبت نام بگیره و با جدول چک کنه و اگر مطابقت داشت اجازه دسترسی به صفحات حفاظت شده رو از طریق ست کردن یک سری session به کاربر بده و کاربر رو به صفحه ای که از اون لوگین کرده ریدایرکت کنه
- صفحات اصلی سایت با استفاده از session اعضای سایت رو تشخیص میدن.
- اسکرپت Logout برای خارج شدن اعضا از سایت.
ممنون neopersia جان.
ما مي خوايم كاربر از هر صفحه اي كه وارد صفحه لوگين يا ثبت نام مي شه بعد از اتمام مراحل دوباره به صفحه اي كه بوده بصورت لاگين شده ريدايركت بشه.
و يك سوال: اگه بخوايم از https براي صفحه ثبت نام و لوگين استفاده كنيم شريط فرق مي كنه؟!
من جدول اعضا رو با این ساختار ایجاد کردم:
[php]
CREATE TABLE IF NOT EXISTS `testtable` (
`id` int(11) unsigned NOT NULL auto_increment,
`username` varchar(255) collate utf8_unicode_ci NOT NULL,
`password` varchar(255) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
[/php]
این اسکرپت ثبت نام و فرم مربوط به اون هست که توی یک فایل با نام register.php ذخیره میشه:
[php]
<?php
session_start();
// حذف بک اسلشهایی که به صورت خودکار توسط Magic Quotes به اطلاعات ارسال شده افزوده شده اند
function UnEscape($string) {
if (get_magic_quotes_gpc()) {
return stripslashes($string);
} else {
return $string;
}
}
$errors = array();
$min_length = 4;
$max_length = 20;
// اجرای اسکرپت ثبت نام در صورتی که اطلاعات با متد پست به صفحه ارسال شده باشند
if($_SERVER['REQUEST_METHOD'] == "POST") {
$username = UnEscape($_POST['user']);
$password = UnEscape($_POST['pass']);
// چک کردن اطلاعات وارد شده توسط کاربر
if(strlen($username) < $min_length) {
$errors[] = "حداقل طول نام کاربری $min_length حرف است!";
}
if(strlen($username) > $max_length) {
$errors[] = "حداکثر طول نام کاربری $max_length حرف است!";
}
if(strlen($password) < $min_length) {
$errors[] = "حداقل طول کلمه عبور $min_length حرف است!";
}
if(strlen($password) > $max_length) {
$errors[] = "حداکثر طول کلمه عبور $max_length حرف است!";
}
if($_POST['pass'] !== $_POST['retype_pass']) {
$errors[] = "کلمه عبور با تکرار کلمه عبور مطابقت ندارد!";
}
// وارد کردن اطلاعات کاربر در صورتی که اطلاعات معتبر باشند
if(empty($errors)) {
// اتصال به سرور
mysql_connect('localhost', 'root', '') or die(mysql_error());
// اتصال به دیتابیس
mysql_select_db('testDB') or die(mysql_error());
// اسکیپ کردن داده های وارد شده توسط کاربر
$username = mysql_real_escape_string(htmlentities($username, ENT_QUOTES, 'UTF-8'));
$password = mysql_real_escape_string($password);
// به دست آوردن تعداد سطرهایی که نام کاربری مشابه نام کاربری انتخاب شده کاربر دارند
list($count) = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM testTable WHERE username = '$username';"));
if($count) {
// قطع عملیات در صورتی که نام کاربری وارد شده قبلاً ثبت شده باشد
mysql_close();
$errors[] = "نام کاربری مورد نظر قبلاً ثبت شده است!";
} else {
// ثبت اطلاعات و ریدایرکت کردن کاربر برای جلوگیری از ارسال مجدد اطلاعات در صورت رفرش شدن صفحه
mysql_query("INSERT INTO testTable SET username = '$username', password = MD5('$password');") or die(mysql_error());
mysql_close();
$_SESSION['registeration_completed'] = true;
header("Location: $_SERVER[PHP_SELF]");
exit();
}
}
}
?>
<!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 http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>صفحه ثبت نام از کاربران جدید</title>
<style type="text/css">
body { direction:rtl; }
form, table { width: 300px; margin:0px auto;}
td { text-align:center; }
th { text-align:right; }
</style>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<?php
if(!empty($errors)) {
echo "<ul>";
foreach($errors as $error) {
echo "<li>$error</li> \n";
}
echo "</ul>";
} elseif ($_SESSION['registeration_completed']) {
echo "<h3>ثبت نام شما با موفقیت انجام شد.</h3>";
unset($_SESSION['registeration_completed']);
}
?>
<table border="0">
<tr>
<th>نام کاربری :</th>
<td><input type="text" name="user" value="<?php echo UnEscape($_POST['user']); ?>" /></td>
</tr>
<tr>
<th>کلمه عبور :</th>
<td><input type="password" name="pass" /></td>
</tr>
<tr>
<th>تکرار کلمه عبور :</th>
<td><input type="password" name="retype_pass" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="ثبت نام" /></td>
</tr>
</table>
</form>
</body>
</html>
[/php]
چون الان یه کم عجله دارم توضیحات اسکرپت رو نمیتونم بنویسیم
به همین دلیل این پست رو نگه میدارم تا بعداً توضیحات اسکرپت بالا رو توش بنویسم
اگر هم پیشنهادی دارید که میخواید توی اسکرپت بالا اعمال بشه لطفاً مطرح کنید
validate فيلدها اگه سمت مشتري بود خيلي عالي مي شد.
مي تونيم بعد از ثبت نام كاربر رو به صورت لاگين شده داشته باشيم.
اونجوری کاربر می تونه خیلی راحت اطلاعات اشتباه وارد کنه. مگر این که هم قبل و هم بعد از ارسال، Validate بشننقل قول:
validate فيلدها اگه سمت مشتري بود خيلي عالي مي شد.
اول باید صفحه لاگین طراحی بشه. بعد بر طبق ساختار اون، خیلی راحت میشهنقل قول:
مي تونيم بعد از ثبت نام كاربر رو به صورت لاگين شده داشته باشيم.
نمی دونم neopersia جان، اون رو هم تهیه کرده یا نه؟ اگر تهیه نکرده باشه، من می تونم اون رو درست کنم و توضیح بدم.
مي دونم . با غير فعال كردن جاوااسكريپ مي تونه . منظورم همون هم سمت سرور و هم سمت مشتري بود.
و يك سوال: منظور از استفاده از تابع strlen چيه؟
در صفحه ثبت نام من از فيلد checkbox استفاده كردم . وقتي به اون value مي ديم هنگامي كه تيك زديم value رو مي فرسته ولي اگه تيك نزنيم چي؟ هيچي نمي فرسته؟
من فقط بلدم با استفاده از if وقتي خالي باشه يه چيز ديگه جايگزين كنم . شما راه حلي دارين؟
سوال: چرا در value فيلدهاي text از <?php echo UnEscape($_POST['name']); ?> استفاده مي كنيم. حتما لازمه؟
این تابع، طول مقدار یک متغیر را نشان می دهدنقل قول:
منظور از استفاده از تابع strlen چيه؟
یعنی برای این:
[PHP]$text = strlen("hi)";[/PHP]
می نویسه 2 و برای این:
[PHP]$text = strlen("salam)";[/PHP]
می نویسه 5
فکر کنم خالی می فرسته. یعنی یه همچین چیزی (فکر کنم) :
[PHP]$_POST["checkbox1"] = "";[/PHP]
توابع دیگری هم داریم:نقل قول:
من فقط بلدم با استفاده از if وقتي خالي باشه يه چيز ديگه جايگزين كنم . شما راه حلي دارين؟
[PHP]empty($text);[/PHP]
بررسی می کنه که آیا این متغیر خالی هست یا نه
[PHP]is_null($text);[/PHP]
بررسی می کنه که آیا این متغیر نال هست یا نه
[PHP]isset($text);[/PHP]
بررسی می کنه که آیا همچین متغیری تعریف شده یا نه
چند تا is_... دیگه هم داریم که مثلاً می بینه که عدد هست یا نه یا مثلاً رشته هست یا نه و ...
چرا در value فيلدهاي text از <?php echo UnEscape($_POST['name']); ?> استفاده مي كنيم. حتما لازمه؟
حتماً لازمه
چون جلوی حملات sql injection رو می گیره
اگر مثال خواستی بگو ولی بدون که لازمه
به غیر از حملات sql injection باعث میشه که کاربر بتونه توی متنش ' و " رو وارد کنه
در غیر این صورت ممکنه ارور بده
استفاده از اين كد براي امنيت صفحه ثبت نام و فرم هايي كه به ديتابيس متصل مي شوند كافيه؟
آره تقریباً
ولی بعداً اگر قرار شد که پرینت بشه، باید کدهای مخرب html ش رو هم حذف کنیم
يعني چي اگه پرينت بشه؟ - كدهاي مخرب چيا هستن؟
[PHP]print($_POST["something"]);[/PHP]
کد مخرب مثلاً دستوری که کوکی هات رو بخونه و برای یه سایتی بفرسته
در کل کدهای html و اسکریپت ها
ولیدیشن سمت کاربر کاری نداره چار تا خط جاوا اسکرپته که باید به فرم اضافه بشه ولی به این بخش تالار مربوط نمیشد برای همین استفاده نکردم.نقل قول:
validate فيلدها اگه سمت مشتري بود خيلي عالي مي شد.
وقتی چک باکس چک نخورده باشه هیچی به سرور فرستاده نمیشه نه مقدار و نه اسم فیلد درست مثل زمانی که فیلد disabled باشه.نقل قول:
در صفحه ثبت نام من از فيلد checkbox استفاده كردم . وقتي به اون value مي ديم هنگامي كه تيك زديم value رو مي فرسته ولي اگه تيك نزنيم چي؟ هيچي نمي فرسته؟
در مورد لوگین شدن بعد از ثبت نام همونطور که مسیح جان گفت باید بزاریم بعد از نوشتن قسمت ثبت نام این قابلیت رو اضافه کنیم.
منظور مسیح از کدهای مخرب کدهای HTML هست که ممکنه کاربر بتونه با استفاده از اونا چیزایی رو توی صفحه ثبت کنه که مشکل ساز بشه اسم دقیقشو نمیدونم
چون من بنا رو بر این گذاشتم که نام کاربری افراد جایی نمایش داده نمیشه اونا به معادل html شون تبدیل نکردم. تو این حالت اگر طرف بیاد یک تگ اسکرپت رو به عنوان نام کاربریش به کار ببره میتونه اسکرپت خودشو توی سایت اجرا کنه. چاره این هم استفاده از توابعی مثل htmlspecialchars هست که کاراکترهای مورد استفاده توی تگهای html رو به معادل اونها تبدیل میکنه. مثلاً < رو تبدیل میکنه به <.
البته اگر قرار باشه نام کاربری توی سایت نمایش داده بشه بهتره این تبدیل همون موقع ثبت نام انجام بشه تا دیگه هربار کار تبدیلو روی دوش سرور نندازیم.
در مورد بقیه مسائل هم که مسیح جان توضیح داد.
مسیح جان دلیل اینکه من اومدم کل اسکرپت رو خورد کردم این بود که بقیه هم بتونن تو نوشتنش همکاری کنند مخصوصاً شما که این روزا توی بخش داینامیک داری به سوالات بقیه دوستان رسیدگی میکنینقل قول:
نمی دونم neopersia جان، اون رو هم تهیه کرده یا نه؟ اگر تهیه نکرده باشه، من می تونم اون رو درست کنم و توضیح بدم.
من فقط یه توضیح در مورد اون تابع UnEscape دارم که توی همون پست رزرو شدم مینویسمش. فکر میکنم اگه تو بقیه اسکرپت هم از این تابع استفاده بشه یکپارچگی کار بیشتر میشه.
واقعا به فكرم نيفتاده بود كه ممكنه كد اسكريپت رو وارد ديتابيس كنند . چطوري مي شه حلش كرد؟ اگه بشه رو همون كد قبلي اعمل كنيد. ممنون مي شم.
اعمال شد :)
thanx بابا ، تا اينجاش منم فرم ثبت ناممو تموم كردم. عالي شد.
الان که داشتم صفحات قبلی رو مرور میکردم اینو دیدم:
در قسمت value مربوط به فیلد user استفاده از این کد الزامی نیست. من اینو گذاشتم که نام کاربری رو توی فرم ثبت نام ذخیره کنه تا اگه مشلی در ثبت نام وجود داشت و یا اطلاعات معتبر نبود وقتی صفحه برای کاربر نمایش داده میشه نام کاربری رو نخواد دوباره وارد کنه یا راحت بتونه اصلاح کنهنقل قول:
چرا در value فيلدهاي text از <?php echo UnEscape($_POST['name']); ?> استفاده مي كنيم. حتما لازمه؟
برای کلمه عبور این کارو نکردم چون مشکل امنیتی پیش میاره
اما استفاده از این تابع در قسمتی که اطلاعات وارد دیتابیس میشه الزامی هست.
به يه مشكل برخوردم:
من از querystring استفاده مي كنم مثلا ?lng=fa
وقتي كه طرف ثبت نام مي كنه صفحه برمي گرده بهindex.php در حالي كه بايد index.php?lng=fa باشه
يعني من فرم رو به آدرس index.php?lng=fa مي فرستم
يك هكر چطوري مي تونه با تزريق query به ديتابيس نفوذ كنه؟( نمي خوام تاپيك منحرف بشه ولي براي امنيت فرم ثبت نام لازمه)
من تو يكي از فيلدهاي ثبت نام mybb كاراكتر ,' را امتحان كردم error داد و مسير خطا رو مشخص كرد فكر كنم اين خودش يه bug مي تونه باشه . ؟
اینو بزار برای اکشن فرم:
[php]
<?php echo $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'] ?>
[/php]
این رو هم بزار به جای تابع هدر قبلی:
[php]
header("Location: $_SERVER[PHP_SELF]?$_SERVER[QUERY_STRING]");
[/php]
البته اگه صبر کنی کار این اسکرپت تموم بشه احتمالا این مشکل خود بخود حل میشه
حل شد thanx
به نظر شما فرم ثبت نام ما تكميل شده؟
ديگه فكر نكنم مشكل امنيتي و اينا داشته باشيم!