PDA

View Full Version : سوال: یک ایده جدید



rezachess
چهارشنبه 29 مرداد 1393, 16:50 عصر
سلام خسته نباشید.
من یک ایده جدید دارم برای اینکه امنیت و پرفورمنس به شکلی فوق العاده بره بالا.
ایده من برای استفاده از سشن ها هست به یک شکل خاص .
فرض کنین شما یک سایت دارید مثلا سایت بازی . تو این سایت یک قسمت برای ساخت ساختمان جدید هست . تو اون صفحه که می روید یک تابع اجرا می شه و ساختمان های قابل ساخت برای شما نمایش داده می شه ( این تابع کلی کار انجام می ده و مصرف رم و سی پی یو بالا داره !) در نهایت یک می گه که آقا شما مثلا می تونی یک سری ساختمان هایی بسازی تهش هم یک لینک می ده که اگه روش کلیک کنی ساختمان ساخته می شه لینکش هم به این صورت هست
build.php?id=5&bid=7&fid=8&c=123;
که اون (fid , bid , id ) ماله ساخت ساختمان هست c هم ماله چک کردن با سشن هست که با ریفریش در صفحه مقصد دوباره ساختمان ساخته نشه ! (یک چیز معمولی ).
مشکل اینجا پیش می آید که در صفحه مقصد باز باید همه چک ها از ابتدا روی ساختمان که می خواد ساخته بشه انجام بشه (همون تابع پر مصرف) چون شاید یکی بیاد مثلا bid(build id) را یک مقدار دیگه بده و یک ساختمان غیر مجاز بخواد بسازه.

حالا ایده من این بود که بیایم از سشن به این سبک استفاده کنیم .


$_SESSION[$Key]=array('id'=>5,&'bid'=7,'fid'=>8);

لینک برای صفحه مقصد به این شکل می شه
build.php?key=$key
که حالا یک کی رندم یا براساس یک قایده ایجاد می کنیم و تو صفحه مقصد از اون کی محتویات سشن را می خوانیم .
فواید این روش این هست که
1- دیگه کاربران نمی تونن اطلاعات وارد کنن فقط یک کی هست که اون هم تو صفحه مقصد چک های لازم روش انجام میشه و خطراتی مثله SQL injection و مشکلاتی از این سبک پیش نمی یاد
2- دیگه نیازی نیست که برخی از توابع دوباره اجرا بشن تا صحت اطلاعات چک بشه ( در اینجا اون تابع سنگین )

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

حالا سوال من این هست که اول که این روش خوبه یا نه !؟
دو برای مشکلاتش راه حلی هست یا نه !؟

arash691
چهارشنبه 29 مرداد 1393, 18:55 عصر
الان بازی سازی تحت وب با پیشرفت js دنیای خودش رو پیدا کرده و همه چیز رو به زبون هایی مثل php و ... پاس نمیدن .

rezachess
چهارشنبه 29 مرداد 1393, 19:19 عصر
حالا من مثال زدم . ولی با این حال فکر نکنم این مسایل را با js انجام بدن چونکه به راحتی js را می شه تغییر داد ! مثلا جایی دیدید که کد کپچا را با js بزنه !؟

مهرداد سیف زاده
چهارشنبه 29 مرداد 1393, 19:20 عصر
این همه نوشتید که بگید من قراره اطلاعات یک بازی رو در session قرار بدم و طرف بازی کنه
بجای این فک کردنهای بسیار سنگین یکم کتابهای بازی سازی تحت وب رو با js و html5 بخونید تا انقدرم بهتون فشار نیاد
ببینید الان دیگه تمام مرورگرها(منظورم به غیر از ie) از آخرین فناوری های وب استفاده میکنن.
این کار شما هم براحتی میشه با استفاده از cookie به کمک js انجام داد. یعنی سرور تنها کارش اینه که صفحه رو لود کنه. حالا شما یه حدی برای فعالیت صفحه در نظر میگیرید مثلا طرف صفحه اول بازی رو لود کرده خب وقتی تا اولین ساختمون رو تکمیل نکرده و بهش امتیازی داده نشده که نباید اطلاعات روی سرور ذخیره کنید. پس بعد از فعالیت هر کاربر اون اطلاعات میبرید روی سرور.
در هر صورت توصیه میکنم برید و مطالعه مفید داشته باشید.

arash691
چهارشنبه 29 مرداد 1393, 21:29 عصر
حالا من مثال زدم . ولی با این حال فکر نکنم این مسایل را با js انجام بدن چونکه به راحتی js را می شه تغییر داد ! مثلا جایی دیدید که کد کپچا را با js بزنه !؟

js دیگه اون js سابق نیست :) .. خیلی کارا میشه باهاش انجام داد ... یکم سرچ کنید متوجه منظورم میشید

rezachess
چهارشنبه 29 مرداد 1393, 23:47 عصر
راستش آره من زیاد با جاوااسکریپت کار نکردم و تازه دارم جی کوری می خونم ! ولی این را می دونم هر چی سمت کلاینت انجام بشه قابل تغییره هرچی !! و جاوااسکریپت هم در سمت کاربر اجرا می شه و اون هم قابل تغییره !

rezaonline.net
پنج شنبه 30 مرداد 1393, 00:40 صبح
میتونید url رو هش کنید با یک رشته سالت ، و بعد از فراخوانی صفحه مقصد هش شده را بررسی کنید که کاربر تغییری در لینک نداده باشد.
یه چیزی مثل checksum

rezachess
پنج شنبه 30 مرداد 1393, 11:14 صبح
متوجه نشدم می شه بیشتر توضیح بدید !؟