تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 11

نام تاپيک: سوال در مورد PHP

  1. #1
    ناظر انجمن توسعه و ساخت بازی Reza Azimy_RW's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    بی سرزمین تر از باد
    پست ها
    3,320

    14 سوال در مورد PHP

    اساتید محترم سلام
    میبخشید این کدی که نوشتم از نظر امنیتی چقدر قویه ؟ آیا کسی میتونه هکش کنه ؟ راحت یا ... ؟ برای بالاتر بردن امنیتش چیکار میشه کرد ؟
    اگه یکی یا قسمتی از سوالا رو هم بلدید خیلی ممنون میشم راهنمایی کنید
    چون ممکنه کدها به هم بریزه تو صفحه وحسش نباشه کپی کنید تو ویرایشگر () یک عکس هم از کدها گرفتم که قرار میدم :
    عکس :



    کدها :
      محتوای مخفی: کد 

    <?php
    $db = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') or die('Could not connect: ' . mysql_error());
    mysql_select_db('my_database') or die('Could not select database');

    // Strings must be escaped to prevent SQL injection attack.
    $name = mysql_real_escape_string($_GET['name'], $db);
    $score = mysql_real_escape_string($_GET['score'], $db);
    $hash = $_GET['hash'];

    $secretKey="mySecretKey"; # Change this value to match the value stored in the client javascript below

    $real_hash = md5($name . $score . $secretKey);
    if($real_hash == $hash) {
    // Send variables for the MySQL database class.
    $query = "insert into scores values (NULL, '$name', '$score');";
    $result = mysql_query($query) or die('Query failed: ' . mysql_error());
    }
    ?>


    ممنون و موفق باشین

  2. #2
    پروفشنال behnamy01's Avatar
    تاريخ عضويت
    Jan 2013
    پست ها
    706

    پيش فرض

    دقیق مشخص نیست کدتون چه کاری انجام میده، اگر میگفتید بهتر بود! مثلا شبیه کد بخش لاگین (authentication کاربر توی دیتابیس) هستش ولی با وجود گرفتن hash با GET این فرض رد میشه!! اگر بگید چه کار میخواین بکنید بهتر میشه توضیح داد. به هر جهت موارد زیر رو در حالت کلی میشه گفت:
    1- از توابع MySQL استفاده نکنید، از mysqli یا PDO استفاده کنید و داده های ورودی کاربر رو Bind param کنید.
    2- ترجیجا از md5 استفاده نکنید اگر هدفتون اینه که چیزی رو هش شده توی دیتابیس قرار بدید. از bcrypt یا sha512 استفاده کنید.
    3- ترجیحا از GET استفاده نکنید چون ورودی ها توی url دیده میشن و از لحاظ امنیتی زیاد جالب نیست. از POST استفاده کنید.
    4- باید کدهای جاوا اسکریپت سمت کلاینت رو بذارید تا مشخص بشه آیا کارتون از لحاظ امنیتی درست هستش یا نه.
    5- اگر نمیخواین خطا ها رو به کاربر نشون بدید اون die و MySQL_error و ... رو بردارید و نمایش اررور ها رو هم غیرفعال کنید.

    در نهایت هم دوست عزیز سوالتون رو توی بخش PHP بپرسید تا من و سایر دوستان ببینیم و بتونیم جواب بدیم. من دیشب شانسی این تاپیک رو از بخش آخرین تاپیک های انجمن دیدم و این بخش رو اصلا دنبال نمی کنم.

  3. این کاربر از behnamy01 بخاطر این مطلب مفید تشکر کرده است


  4. #3
    مدیر انجمن طراحی صفحات وب tabriz-info's Avatar
    تاريخ عضويت
    Jun 2006
    محل سكونت
    هالیکارناسوس
    پست ها
    4,277

    پيش فرض

    این کد های mysql که نوشتی کلا از استاندارد خارج شده و دیگه پشتیبانی نمیشه

    بقیه موارد هم که دوستمون به خوبی و کامل بیان فرمودند

  5. این کاربر از tabriz-info بخاطر این مطلب مفید تشکر کرده است


  6. #4
    ناظر انجمن توسعه و ساخت بازی Reza Azimy_RW's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    بی سرزمین تر از باد
    پست ها
    3,320

    پيش فرض

    کدهای سمت کلانیت c# هستن واسه ثبت امتیاز بازی انلاینه درسته کدها قدیمیه چون از جایی کپی کردم واسه تست
    در کل دمتون گرم نکته هایی که گفتین عالی بود خیلی کمکم کرد

  7. این کاربر از Reza Azimy_RW بخاطر این مطلب مفید تشکر کرده است


  8. #5
    ناظر انجمن توسعه و ساخت بازی Reza Azimy_RW's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    بی سرزمین تر از باد
    پست ها
    3,320

    پيش فرض

    دوستان یه سوال دیگس بدجوری درگیرم کرده چجوری بفهمم کاربرر آنلاینه یا افلاین ؟ هر لحظه چک بشه تا هر وقت از بازی افلاین شد متوجه بشم ,یه همچین چیزی
    دمتون گرم

  9. #6
    پروفشنال behnamy01's Avatar
    تاريخ عضويت
    Jan 2013
    پست ها
    706

    پيش فرض

    سلام. در وهله اول سشن ها رو توی دیتابیس ذخیره کنید نه به حالت معمولی، این کار برای امنیت هم بهتره. سرچ کنید: ذخیره سشن در DB

    بعدش کوئری بزنید به دیتابیس و چک کنید آیا سشن اون کاربر وجود داره یا نه، اگر وجود نداشت یعنی آفلاینه!

  10. این کاربر از behnamy01 بخاطر این مطلب مفید تشکر کرده است


  11. #7
    ناظر انجمن توسعه و ساخت بازی Reza Azimy_RW's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    بی سرزمین تر از باد
    پست ها
    3,320

    پيش فرض

    سلام. در وهله اول سشن ها رو توی دیتابیس ذخیره کنید نه به حالت معمولی، این کار برای امنیت هم بهتره. سرچ کنید: ذخیره سشن در DB

    بعدش کوئری بزنید به دیتابیس و چک کنید آیا سشن اون کاربر وجود داره یا نه، اگر وجود نداشت یعنی آفلاینه!

    ممنون عزیز من یه جوری باید توی سی شارپ چک کنم که کاربر انلاینه یا نه . یعنی دو تا کاربر دارن با هم بازی میکنن باید به صورت لحظه ای یا مثلا با خطای تغریبا 5 ثانیه متوجه افلاین شدن کاربر بشم

    مثلا دقیقا میخام یه متغیری داشته باشم که وقتی کاربر انلاینه 1 و وقتی افلاینه 0 بشه . اینو اگه بشه اجرا کنم راحت میتونم دریافتش کنم و کار مورد نظرمو انجام بدم
    واقعا کارم گیره خیلی ممنون میشم راهنمایی کنید
    از مدیران هم خاهش میکنم تایپیکو به بخش مناسب انتقال بدن

  12. #8
    پروفشنال behnamy01's Avatar
    تاريخ عضويت
    Jan 2013
    پست ها
    706

    پيش فرض

    ممنون عزیز من یه جوری باید توی سی شارپ چک کنم که کاربر انلاینه یا نه . یعنی دو تا کاربر دارن با هم بازی میکنن باید به صورت لحظه ای یا مثلا با خطای تغریبا 5 ثانیه متوجه افلاین شدن کاربر بشم

    مثلا دقیقا میخام یه متغیری داشته باشم که وقتی کاربر انلاینه 1 و وقتی افلاینه 0 بشه . اینو اگه بشه اجرا کنم راحت میتونم دریافتش کنم و کار مورد نظرمو انجام بدم
    واقعا کارم گیره خیلی ممنون میشم راهنمایی کنید
    از مدیران هم خاهش میکنم تایپیکو به بخش مناسب انتقال بدن
    سی شارپ بلد نیستم من، ولی فکر میکنم شما یک بازی آنلاین تحت ویندوز داری میسازی که قسمت سمت سرورش فقط با php هستش و سمت کاربر رو هم که با سی شارپ. خب شما باید هر چند ثانیه وقتی کاربری داره بازی رو انجام میده یک کوئری به دیتابیس سرورت بزنی از سمت سی شارپ، و فیلد زمان آخرین فعالیت کاربر رو اینجوری به روز کنی تا بفهمی کاربر آنلاینه یا نه.
    حالا چه سمت سرور چه سمت کاربر، هر وقت لازم داشتی کوئری میزنی و اون زمان آخرین فعالیت کاربر رو میخونی و اگر مثلا 5 ثانیه از زمان آخرین فعالیت اون کاربر گذشته بود یعنی آفلاین هستش.
    سناریو کار اینه ولی کد سی شارپش رو بلد نیستم، جستجو کنید حتما به جواب میرسید.

  13. این کاربر از behnamy01 بخاطر این مطلب مفید تشکر کرده است


  14. #9
    ناظر انجمن توسعه و ساخت بازی Reza Azimy_RW's Avatar
    تاريخ عضويت
    Jun 2008
    محل سكونت
    بی سرزمین تر از باد
    پست ها
    3,320

    پيش فرض

    ایول داداش دقیقا منظورم همین بود خیلی دارم نزدیک میشم
    اونوقت میتونم اونجایی که نام کاربری و پسوورد کاربرا ذخیره میشه یه فیلد اضافه واسه زمان قرار بدم تا چند ثانیه یک بار اپدیت شه بدون اینکه ردیف جدیدی اضافه شه ؟
    مثلا یه یوزر و پسوورد اضافه شده الان میخام فقط پسووردشو ویرایش کنم بدون اینکه یه ردیف دیگه اضافه شه . همون قبلی اپدیت شه
    منظورم از ردیف ایناس : نمدونم اسمش چیه

    چون هر یوزر و پسووردی که ذخیره میشه چون فک کنم AUTO_INCREMENT تیکش زده شده توی ردیف جدید ذخیره میشه ولی میخام مثلا پسوورد(یا همون زمان) ویرایش شه و ردیف جدیدی ایجاد نشه(همون ردیف)
    ویرایش :
    و یه چیز دیگه الان فقط فیلد ID تیک AUTO_INCREMENT ش زده شده چرا وقتی یوزر و پسوورد اینسرت میکنیم ردیف جدید ایجاد میشه ؟ مگه نباید فقط وقتی بخش ای دی رو اینسرت میکنیم ردیف جدید ایجاد شه ؟

    واقعا ببخشید اگه اماتور توضیح میدم
    Last edited by Reza Azimy_RW; 03-05-2015 at 19:52.

  15. #10
    پروفشنال behnamy01's Avatar
    تاريخ عضويت
    Jan 2013
    پست ها
    706

    پيش فرض

    بله شما از همون Phpmyadmin برید به بخش structure و یک فیلد جدید بعد از فیلد پسورد ایجاد کنید به اسم مثلا last_modified که قراره زمان رو توش بذارید.
    بعدش هر چند ثانیه از سمت سی شارپ یک کوئری مثل این رو توی دیتابیس سرور میزنید:
    "UPDATE `users` SET `last_modified`=2015-05-03 21:16 WHERE username=reza"
    توی این کوئری میگید که فیلد last_modified رو برای کاربر رضا عوض کن و اینی که میگم رو بذار، توی سی شارپ دیگه باید یک جوری نام کاربری که بازی رو داره اجرا میکنه بدست بیارید و زمان رو هم بدست بیارید بذارید توی این کوئری.

    پ.ن: به ردیف توی sql رکورد میگن.
    پ.ن2 : auto increment یعنی به صورت اتوماتیک زیاد بشه، یعنی شما وقتی از دستور insert استفاده میکنید به جای اینکه نام هر سه فیلد id, username, password رو توی کوئریتون استفاده کنید، فقط از username, password استفاده میکنید و وقتی این دستور میخواد اجرا بشه mysql خودش id رو هم پر میکنه و یکی به id قبلی که از قبل موجود بوده اضافه میکنه. معمولا از auto increment به همراه ویژگی primary استفاده میشه که باعث میشه توی دیتابیس شما هر رکورد به عنوان یک داده جداگانه و یکتا از بقیه داده ها شناخته بشه.

  16. این کاربر از behnamy01 بخاطر این مطلب مفید تشکر کرده است


صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •