PDA

View Full Version : سوال: چگونه می توان از سرقت فایل های js جلوگیری کرد؟؟؟؟



aminghaderi
یک شنبه 20 تیر 1389, 01:10 صبح
با سلام و درود خدمت اساتید و دوستان
چگونه می توان از سرقت فایل های js جلوگیری کرد؟؟؟؟
احتمالا برای شما هم پیش آمده که بخواهید یه فایل جاوااسکریپتی که جزء یکی از بخش های اصلی سایتتون محصوب می شود را از دسترس غیر مجاز (Download) حفظ کنید، اینکار چگونه صورت می گیرد و تا چه حدی مطمئن هست؟؟؟؟
من شنیدم با عوض کردن پسوند ها permission فایل ها تغیر پیدا می کنه؟!
مثلا اگر پسوند فایل js رو به aspx تغیر بدیم ، می شود از دسترسی به فایل جلو گیری کرد ؟!

با سپاس فراوان

ahrimaneahurai
یک شنبه 20 تیر 1389, 01:39 صبح
فکر نکنم بشه
چون جاوا برای کلاینت هست و باید دانلود شه تا اجرا شه. پس طرف می تونه برداره.
منم کنجکاو شدم

Alireza_Salehi
یک شنبه 20 تیر 1389, 09:12 صبح
خیلی زحمت نکشید فایلهای js فایلهای متنی هستند و حتی اگر پسوند آنها را عوض کنید باز هم قابل مشاهده هستند.

aminghaderi
یک شنبه 20 تیر 1389, 14:51 عصر
خیلی زحمت نکشید فایلهای js فایلهای متنی هستند و حتی اگر پسوند آنها را عوض کنید باز هم قابل مشاهده هستند.
برادر مگه فایل های aspx چه فایل هایی هستند؟! اونها هم که متنی هستند؟! در صورت درخواست صفحه aspx سرور اجازه دسترسی نباید بدهد؟! درسته؟؟؟
چون باید با فایل های اصلی اشتباه بگیرد ، البته من این مورد رو هنوز امتحان نکردم ، ولی به منطقی به نظرمی رسید؟!
البته کلام شما متینه و من شخصا در اولین فرست این مورد رو امتحان می کنم.
و لی باید روشی باشه چون من شخصا چند تا سایت (داخلی) خوب می شناسم که سمت کلاینت کلی کد جاوا اسکریپت هندل می کنند و لی اصلا از فایل هایی با پسوند js خبری نیست ولی جاوا که غیر فعال باشه سایت ها کار نمی کنند؟!:گیج:
نمی دونم ولی من به این مورد نیاز دارم ، شده باشه به صورت اجکس کد ها رو داخل پیج تزریق کنم ، این کار رو می کنم تا کاربر دسترسی به فایل ها نداشه باشه ، تنها مشکل من برای این کار عدم دسترسی المنت ها توسط JQuery هست که اونم با یکم تحلیل سنگین تر شاید قابل اجرا باشه؟!
ولی من یه راه ساده می خوام چون همین الانش کلی کد باید سمت کلاینت اجرا بشه ، نمی خوام اگه کامپیوتر کاربر ضعیف بود به مشکل تضعیف سرعت بخوره؟!

bestirani2
یک شنبه 20 تیر 1389, 15:10 عصر
با برنامه نویسی سمت سرور تعیین کن تنها در صورتی فایل مربوطه باز بشه که از داخل یکی از صفحات سایتتون خواسته شده باشه
همچنین کش شدن آن را غیر فعال کنید تا توسط مرورگر ذخیره نشود.

mehdi.mousavi
یک شنبه 20 تیر 1389, 15:58 عصر
با سلام و درود خدمت اساتید و دوستان چگونه می توان از سرقت فایل های js جلوگیری کرد؟؟؟؟ احتمالا برای شما هم پیش آمده که بخواهید یه فایل جاوااسکریپتی که جزء یکی از بخش های اصلی سایتتون محصوب می شود را از دسترس غیر مجاز (Download) حفظ کنید، اینکار چگونه صورت می گیرد و تا چه حدی مطمئن هست؟؟؟؟
من شنیدم با عوض کردن پسوند ها permission فایل ها تغیر پیدا می کنه؟! مثلا اگر پسوند فایل js رو به aspx تغیر بدیم ، می شود از دسترسی به فایل جلو گیری کرد ؟! با سپاس فراوان

سلام.
هدفتون از اینکار چیه؟ اگر اطلاعات محرمانه ای دارید که میخواهید به این طریق از اونها محافظت کنید، این روش اصلا صحیح نیست. در حقیقت در گام نخست، اصلا نباید چنین داده ای با این اهمیت به دست Client برسه.... اما اگر هدفتون محافظت از نوشتن کدهای Script و مشکل تر کردن خوانایی اونها برای افراد دیگه هستش، میتونید از Packer هایی که به این منظور وجود دارن استفاده کنید. طبیعتا اونها هم 100% از کد شما محافظت نخواهند کرد و روشهایی برای بازگرداندن کد وجود داره، اما بدین شکل جلوی بسیاری از افراد رو خواهید گرفت.

بعنوان مثال، کد ساده alert('test'); توسط Packer (http://dean.edwards.name/packer/) به این کد میتونه تبدیل بشه:


eval(function(p,a,c,k,e,r){e=String;if(!''.replace (/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('0(\'1\');',2,2,'alert|test'.split('|'),0,{}))

Packer یک JavaScript Compressor ای هستش که نسخه های قبلی jQuery از اون برای Pack کردن کد استفاده میکردن (و نه Base62 کردن اون!)...

موفق باشید.

Alireza_Salehi
یک شنبه 20 تیر 1389, 16:36 عصر
برادر مگه فایل های aspx چه فایل هایی هستند؟! اونها هم که متنی هستند؟! در صورت درخواست صفحه aspx سرور اجازه دسترسی نباید بدهد؟! درسته؟؟؟
چون باید با فایل های اصلی اشتباه بگیرد ، البته من این مورد رو هنوز امتحان نکردم ، ولی به منطقی به نظرمی رسید؟!
البته کلام شما متینه و من شخصا در اولین فرست این مورد رو امتحان می کنم.
و لی باید روشی باشه چون من شخصا چند تا سایت (داخلی) خوب می شناسم که سمت کلاینت کلی کد جاوا اسکریپت هندل می کنند و لی اصلا از فایل هایی با پسوند js خبری نیست ولی جاوا که غیر فعال باشه سایت ها کار نمی کنند؟!:گیج:
نمی دونم ولی من به این مورد نیاز دارم ، شده باشه به صورت اجکس کد ها رو داخل پیج تزریق کنم ، این کار رو می کنم تا کاربر دسترسی به فایل ها نداشه باشه ، تنها مشکل من برای این کار عدم دسترسی المنت ها توسط JQuery هست که اونم با یکم تحلیل سنگین تر شاید قابل اجرا باشه؟!
ولی من یه راه ساده می خوام چون همین الانش کلی کد باید سمت کلاینت اجرا بشه ، نمی خوام اگه کامپیوتر کاربر ضعیف بود به مشکل تضعیف سرعت بخوره؟!
با ابزارهایی مثل firebug کل اسکریپتی که لود می شود حالا با هر پسوند و شکل و شمایلی که باشه قابل بازیابی است...
وقتی اسکریپت سمت کلاینت داره اجرا میشه یعنی حتما یک فایل اسکریپت لود شده است. پسوندش یا تزریق شدن یا ... مهم نیست. وقتی اسکریپتی اجرا شده یعنی یه جایی هست.

aminghaderi
دوشنبه 21 تیر 1389, 16:22 عصر
با برنامه نویسی سمت سرور تعیین کن تنها در صورتی فایل مربوطه باز بشه که از داخل یکی از صفحات سایتتون خواسته شده باشه
همچنین کش شدن آن را غیر فعال کنید تا توسط مرورگر ذخیره نشود.

چطوری می شه سمت سرور چک کرد که از صفحه ای خاص فایل داره خونده می شه؟؟؟
چطوری می تونم کش شدن فایل رو غیر فعال کنم؟؟؟؟
ممنون می شم یکم راهنمایی کنید؟؟؟

aminghaderi
دوشنبه 21 تیر 1389, 16:47 عصر
سلام.
هدفتون از اینکار چیه؟ اگر اطلاعات محرمانه ای دارید که میخواهید به این طریق از اونها محافظت کنید، این روش اصلا صحیح نیست. در حقیقت در گام نخست، اصلا نباید چنین داده ای با این اهمیت به دست Client برسه.... اما اگر هدفتون محافظت از نوشتن کدهای Script و مشکل تر کردن خوانایی اونها برای افراد دیگه هستش، میتونید از Packer هایی که به این منظور وجود دارن استفاده کنید. طبیعتا اونها هم 100% از کد شما محافظت نخواهند کرد و روشهایی برای بازگرداندن کد وجود داره، اما بدین شکل جلوی بسیاری از افراد رو خواهید گرفت.

بعنوان مثال، کد ساده alert('test'); توسط Packer (http://dean.edwards.name/packer/) به این کد میتونه تبدیل بشه:


eval(function(p,a,c,k,e,r){e=String;if(!''.replace (/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('0(\'1\');',2,2,'alert|test'.split('|'),0,{}))

Packer یک JavaScript Compressor ای هستش که نسخه های قبلی jQuery از اون برای Pack کردن کد استفاده میکردن (و نه Base62 کردن اون!)...

موفق باشید.
ممنون استاد موسوی.
هدفم حفظ کد نوشته شده هست و اینکه چون با xmlhttprequest عملیات درخواست ها به سرور فرستاده می شه واجبه کاربران یا کاربر حرفه ای (نفوزگر) به هیچ وجه دسترسی به کد نداشته باشه تا سر از پروسه طراحی شده در بیاره؟!
البته سمت سرور چندین مانع برای تشخیص هویت کاربر قرار دادم که اگر نفوزگر به پروسه دسترسی پیدا کرد و گرچه نمی توتند به شی xmlhttp دسترسی داشته باشه ؟! ولی اگر دسترسی هم داشت و درخواست مشابهی هم فرستاد در همون مرحله اول کاربر به صفحه Login راهنمایی می شه؟!
اما می خوام کار از همه لحاظ محکم کاری شده باشه.
و یه مشکل که دارم یه بخش از الگریتم یکی از پروسه های سمت وب رو باید در سمت کلاینت اجرا کنم ، و اگر این کد لو برود امکان اینکه نفوزگر با روش کارپروسه سمت سرور هم اشنا بشه خیلی هست.
ولی اگر راهی براش پیدا نشه ترجیهن این الگریتم و در یه حالت دیگر برای سمت کلاینت می نویسم تا خطری سیستم رو تحدید نکنه.:افسرده:
-------
اطلاعات نیست. روش فیلترینگ و ارسال مقادیر هست .
استاد این روشی که معرفی کردید برای کدینک کردن کد خیلی حجم نمی گیره؟
آیا روش ها رمز گزاری غیر قابل برگشت (مثل سمت سرور) برای JavaScript وجود نداره؟؟

mehdi.mousavi
دوشنبه 21 تیر 1389, 17:09 عصر
سلام.
با توضیحاتی که دادید، بنظر میرسه میخواهید از Web Service ای محافظت کنید و اجازه فراخوانی Web Method ها به افراد Unathorized رو ندید. درسته؟ راستش من متوجه منظورتون از "پروسه طراحی شده" نمیشم.


اطلاعات نیست. روش فیلترینگ و ارسال مقادیر هست .
یعنی میخواهید روش ارسال مقادیر لو نره؟ خوب همونطور که دوستان گفتن، ابزارهایی وجود داره که حتی من میتونم خط به خط کدهای اجرا شده در Browser رو دنبال کنم و ... یا ببینم چه درخواستی با چه اطلاعاتی، به چه سروری در چه لحظه ای میره، اونها رو Capture کنم و Replay کنم.... و بسیاری روشهای دیگه....

امکانش هست واضح توضیح بدید که چی تو ذهنتون هستش و سعی در پیاده سازی چه چیزی دارید؟


این روشی که معرفی کردید برای کدینک کردن کد خیلی حجم نمی گیره؟
البته که حجم رو بالا میبره و سرعت رو نیز کاهش میده. اینجا یه Trade Off هستش و باید خودتون تصمیم بگیرید و روش درست رو انتخاب کنید.


آیا روش ها رمز گزاری غیر قابل برگشت (مثل سمت سرور) برای JavaScript وجود نداره؟؟
ببینید. کد JavaScript برای اینکه اجرا بشه (مهم نیست چطوری کد شده، کجا هستش و ...)، باید توی Browser پردازش بشه. ابزاری رو در نظر بگیرید که این پردازش رو مو به مو و ذره به ذره به کاربر نشون بده و اجازه دخل و تصرف در اون رو فراهم کنه.

حتی کدتون رو اگر با Packer نیز Scramble کنید، از اونجاییکه زمان اجرا کاربر میتونه (در صورتیکه با روشهای موجود آشنا باشه) اجرای کدها رو دنبال کنه، دیگه اهمیتی نداره که با چه چیزی کدتون رو بهم ریخته اید و ....

پاورقی: در پست قبلی عرض کردم که "Packer یک JavaScript Compressor ای هستش که نسخه های قبلی jQuery از اون برای Pack کردن کد استفاده میکردن". منظورم در حقیقت این بودش که نسخه های قبلی jQuery توسط Packer کوچک (Minified) شده بودن. گفتم این توضیح رو بدم تا خوانندگان به اشتباه نیفتن...

aminghaderi
دوشنبه 21 تیر 1389, 17:13 عصر
با ابزارهایی مثل firebug کل اسکریپتی که لود می شود حالا با هر پسوند و شکل و شمایلی که باشه قابل بازیابی است...
وقتی اسکریپت سمت کلاینت داره اجرا میشه یعنی حتما یک فایل اسکریپت لود شده است. پسوندش یا تزریق شدن یا ... مهم نیست. وقتی اسکریپتی اجرا شده یعنی یه جایی هست.
استاد آیا امکان دیدن فایلهای اینکریپت شده هم هست؟؟؟؟
اگه فایل ها رو قطعه قطعه کنیم و هر موقع نیاز بود قطعه کدی رو از سرور دریافت کنیم؟!
و این کد های قطعه قطعه شده رو هم به راهنمایی استاد موسوی اینکریپت کنیم و به قول دوستمان کش Browser رو هم ببندیم؟؟؟
باید راهی باشه ؟! :افسرده:
اگه توسط سیستم تشخیص هویت کاربر ، بهش پرمیژن بدیم چطوره؟؟؟؟
مثل دسترسی به فولدر ها ؟؟؟
یا داخل پوشه private بزاریم چطوره؟؟
ایا قابل انجام هست؟؟

LORD AELX
دوشنبه 21 تیر 1389, 17:15 عصر
با برنامه نویسی سمت سرور تعیین کن تنها در صورتی فایل مربوطه باز بشه که از داخل یکی از صفحات سایتتون خواسته شده باشه
همچنین کش شدن آن را غیر فعال کنید تا توسط مرورگر ذخیره نشود.


چطوری می شه سمت سرور چک کرد که از صفحه ای خاص فایل داره خونده می شه؟؟؟
چطوری می تونم کش شدن فایل رو غیر فعال کنم؟؟؟؟
ممنون می شم یکم راهنمایی کنید؟؟؟

در حالت عادی نمیشه! مگر اینکه... :متفکر: من یه فکری دارم... همانطور که میدونید میشه با PHP هم این قضیه رو چک کرد که صفحه لود شده از کدام آدرس اومده (توسط متغیر سرور HTTP_REFERER) و هم این رو که در حال حاضر فایل PHP لود شده مستقیما درخواست شده یا نه (هم با متغیر سرور REQUEST_URL و هم واکشی آن از متغیر سرور PHP_SELF توسط دستور eregi)...
خوب، ما میتونیم کد Javascript مورد نیاز رو توسط فایل PHP اکو (echo) کنیم (یا هر روش دیگر غیر از قرار دادن مستقیم) و توسط دستوراتی که گفته شد از صحت منبع اجرایی آن مطمئن شویم و ضمن اینکه خود این فایل هم مستقیما لود نمی شود.

آیا تا اینجای کار رو درست گفتم؟

حالا بالفرض این شیوه هم مورد استفاده قرار گرفت، بالاخره که باید JS رو به سمت کاربر بفرستیم!! پس چرا اینقدر بیهوده تلاش کنیم؟! بهترین و منطقی ترین شیوه همانی است مهدی عزیز گفتند. یعنی پک کردن سورس JS. اینطوری حداقل از شر 90% افراد کنجکاو خلاص می شویم. ولی هیچ وقت این نکته را فراموش نکنید که امنیت JS پایین است، پس برای هر کاری از آن استفاده نکنید.

موفق باشید :قلب:

bestirani2
دوشنبه 21 تیر 1389, 17:16 عصر
چطوری می شه سمت سرور چک کرد که از صفحه ای خاص فایل داره خونده می شه؟؟؟
چطوری می تونم کش شدن فایل رو غیر فعال کنم؟؟؟؟
ممنون می شم یکم راهنمایی کنید؟؟؟
من کد پی اچ پی مینویسم و با نحوه این کار در دات نت آشنا نیستم و این تاپیک هم اتفاقی وارد شدم ولی به طور کلی توضیح میدهم
حتماً مقالاتی رو دیدی در مورد اینکه فقط از یک آی پی خاص بتوانند وارد سایتتون بشند
یا مقالاتی در مورد اینکه در صورتی که تنها کاربر در صورتی بتواند لینکی رو دانلود کنید که از طرف سایت شما فرستاده بشود که بدین ترتیب ترافیکتون بیهوده مصرف نشود
اینجا هم همین وضع رو داریم
در مورد غیر فعال کردن در تابع header از no-cache استفاده بکنید
هم در داخل فایل جاوا اسکریپت و هم صفحه ای که کد جاوا اسکریپت داخلش هست
فقط توجه داشته باشید که کد جاوا اسکریپت باید تحت سرور ساخته بشه یعنی پسوند اصلیش همون aspx باشه که حالا یک Alias هم با پسوند js میتوید براش در نظر بگیرید

aminghaderi
دوشنبه 21 تیر 1389, 17:40 عصر
با توضیحاتی که دادید، بنظر میرسه میخواهید از Web Service ای محافظت کنید و اجازه فراخوانی Web Method ها به افراد Unathorized رو ندید. درسته؟ راستش من متوجه منظورتون از "پروسه طراحی شده" نمیشم.بله استاد بخش عمده ی کار همینه و همچنین بخش دیگش محافظت از کد (لو نرفتن) و جلوگیری از دسترسی نفوزگر و افزودن اسکریپت به اون هست.


یعنی میخواهید روش ارسال مقادیر لو نره؟ خوب همونطور که دوستان گفتن، ابزارهایی وجود داره که حتی من میتونم خط به خط کدهای اجرا شده در Browser رو دنبال کنم و ... یا ببینم چه درخواستی با چه اطلاعاتی، به چه سروری در چه لحظه ای میره، اونها رو Capture کنم و Replay کنم.... و بسیاری روشهای دیگه....پس با این ترتیپ جاوااسکریپت به هیچ وجه قابل اطمینان نیست.:افسرده:


امکانش هست واضح توضیح بدید که چی تو ذهنتون هستش و سعی در پیاده سازی چه چیزی دارید؟بله استاد ، من دارم پنل مدیریتی خیلی سنگین طراحی می کنم که شبیه CMS هستش (باقابلیت افزایش و حذف کامپنت) و برای اینکه مدیران اصلی یا مدیران میانی در هنگام کار باسیستم راحت باشند (با توجه به اینترنت ماهواره ای ایران!!!) و اینکه Response و Request ها به سرعت انجام بشه 70 درصد فعالیت ها توسط XmlHttpRequest صورت می گیره (از سیستم CallBack استفاده نمی کنم ، از همون اجکس خودمون استفاده می کنم ، ولی نه اجکس های دات نت ، هسته اجکس) الان کار تغریبا انجام شده و مرحله حفظ امنیتش داره انجام می شه ، که سمت سرور چندین راه برای تشخیص هویت کاربر و پرمیژن مربوطه گزاشتم ولی سمت کلاینت داره عزیت می کنه؟!:افسرده:
منظور از پردازه ، چندین تابع طراحی شده که مقادیر کل المنت ها رو از روی صفحه جمع آوری می کنه و کلمات حساس رو حذف می کنه(البته سمت سرور هم دوباره این کار اتفاق می افته) و طبق یه ترتیب خاصت مقادیر رو مرتب و پکج می کنه و بعد ارسال می کنه و سمت سرور مقادیر تفکیک شده و عملیات مورد نظر انجام می شه.(این قسمته که خیلی برام مهمه تا کاربر متوجه اون نشه)
نکته : سمت سرور تمام پارامترها با پرمیژن کاربر که داخل اسکوال ذخیره شده چک می شه و بعد اگه واقعا کاربر همچین دسترسی داشت ،،،، عملیات صورت می گیره؟!
ولی نمی خوام مثلا هین ارسال پارامترها از سمت کاربر نفوزگر Token هارو دستکاری کنه ؟! به جای متن کاربر یه متن دیگه داخل پایگاه ثبت بشه؟! آیا این امکان هست که همچین اتفاقی بیفته؟؟؟

ممنون از راهنماییتون

aminghaderi
دوشنبه 21 تیر 1389, 17:53 عصر
در حالت عادی نمیشه! مگر اینکه... :متفکر: من یه فکری دارم... همانطور که میدونید میشه با PHP هم این قضیه رو چک کرد که صفحه لود شده از کدام آدرس اومده (توسط متغیر سرور HTTP_REFERER) و هم این رو که در حال حاضر فایل PHP لود شده مستقیما درخواست شده یا نه (هم با متغیر سرور REQUEST_URL و هم واکشی آن از متغیر سرور PHP_SELF توسط دستور eregi)...
خوب، ما میتونیم کد Javascript مورد نیاز رو توسط فایل PHP اکو (echo) کنیم (یا هر روش دیگر غیر از قرار دادن مستقیم) و توسط دستوراتی که گفته شد از صحت منبع اجرایی آن مطمئن شویم و ضمن اینکه خود این فایل هم مستقیما لود نمی شود.
آیا تا اینجای کار رو درست گفتم؟

بله دقیقا!
اون سایت هایی که من دیدم هم یکی دوتا شون PHP بودند.

LORD AELX
دوشنبه 21 تیر 1389, 18:52 عصر
من کمی توی وب گشتم و چیزهای جالبی برای ایمن کردن AJAX پیدا کردم. :متفکر: یکی از این موارد SRP-Hermetic (http://www.denksoft.com/wordpress/?page_id=26) بود. در این روش یک کانال ارتباطی امن بین کلاینت و سرور ایجاد می شود و دو شیوه Security به توسعه دهنده ارایه می شود:


Signing mode
Encryption mode

در حالت اول داده ها بصورت plain text مبادله می شوند ولی با روش HMAC (http://en.wikipedia.org/wiki/HMAC) امضا (sign) شده اند. و در روش دوم داده ها بصورت کامل با متد AES (http://en.wikipedia.org/wiki/Advanced_Encryption_Standard) یا CTR (http://en.wikipedia.org/wiki/Block_cipher_modes_of_operationC#%E2%80%8Eounter_. 28CTR.29) انکریپت می شوند.


http://www.denksoft.com/public/srp-hermetic-executive-view.png


توضیحات بیشتر را از وبسایت denksoft مطالعه کنید.

همچنین به یک انجین AJAX بنام (SAJA (Secure Ajax For PHP (http://saja.sourceforge.net/) هم برخوردم که به نظر جالب میاد.

یک مقاله کوچک 6 صفحه ای هم تحت عنوان How to Secure AJAX Requests (http://www.informit.com/articles/article.aspx?p=604094) دیدم، که برای مطالعه بد نیست.
و در اینجا هم توضیحات Symantec در مورد امنیت برنامه های AJAX (http://www.symantec.com/connect/articles/ajax-security-basics)

این ها رو هم مطالعه کنید:
http://insecureweb.com/javascript/secure-your-ajax-request-with-jquery/
http://www.java-entrepreneur.com/50226711/how_to_make_ajax_secure.php

موفق باشید :قلب:

ricky22
جمعه 25 تیر 1389, 05:02 صبح
obfuscate javascript (http://www.google.com/#hl=en&source=hp&q=obfuscate+javascript&aq=1l&aqi=g-l10&aql=&oq=obusfucte+&gs_rfai=&fp=d571b3712fffe003) مناسب نیست؟

LORD AELX
جمعه 25 تیر 1389, 05:23 صبح
obfuscate javascript (http://www.google.com/#hl=en&source=hp&q=obfuscate+javascript&aq=1l&aqi=g-l10&aql=&oq=obusfucte+&gs_rfai=&fp=d571b3712fffe003) مناسب نیست؟
نه نیست!! :اشتباه: این هم یک پکر هست، که راجع بهش قبلا دوستان نظر دادند... قابل Reverse هست و کاملا ایمن نیست.

aminghaderi
جمعه 25 تیر 1389, 12:59 عصر
به دلایلی که استاد موسوی و دگر اساتید و دوستان توضیح دادند ، هیچ راهی برای امن ساختن JavaScript نیست و چون Ajax هم عنصری از همین خاندان هست ، پس زیاد نمی شه روی امنیت کد و امنیت در حال Transfer داده ها مانور داده ، بهترین راهی که من به ذهن رسیده ، تشخیص هویت سمت سرور هست که همین روش رو پیاده کردم و شخصا متوجه امکان تحدید نشدم؟!
وقتی پارامتر ها با دسترسی کاربر فعلی چک بشه ، دیگه هر جور هم پرامتر تغیر کرده باشه ، مشکلی پیش نمی یاره !!!!
پارامتر با دسترسی مقایسه می شه و چون دسترسی به اون بخش نداره پس چندتا پیام محترمانه به کاربر مبنی بر اینکه پارامتر ها دستکاری شده و در صورت تکرار برای برسی دلیل کار ، کد کاربری و IP اون ضبط می شه و در صورت تکرار مجدد کاربر در حالت تعلیق در می یاد؟! (کد کاربر و رمز عبور موقتا مسدود می شه).
البته این کار واجب نیست ، چون اگه کاربر 1000 بار هم که درخاست به سرور داشته باشه ، پاسخ سرور منفی خواهد بود و این کار برای شناسایی کاربر و جلوگیری از حدر رفتن منابع سرور هست.
به نظرم روش کاملا امنی باید باشه چون تمام کار های امنیتی در سمت سرور انجام می شه و برای دسترسی ها هم از SQL استفاده می شه .

خوب اساتید و دوستان نظرشون رو بدن و اگر تحدیدی برسر راه هست ممنون می شم یادآوری کنید.
ارادتمند همه عزیزان.

abizaki
جمعه 25 تیر 1389, 17:51 عصر
من فقط 13 سالمه و تازه دو ساله که برنامه نویسم. اگه اشکالی بود ببخشید و تذکر بدید.

شما برای این کار می تونید همون طور دوستان گفتن، اگر از php استفاده کنین، با استفاده از Echo واگر از ASP.Net از Response.Write استفاده کنین تا اسکریپت های مربوط به هر صفحه رو بفرستید. اما برای پردازش های محرمانه!!!! : اگه اهل پر و پا قرص اینترنت باشین و به سایت های بزرگ نرم افزاری سری بزنین، می بینین که اون ها اطلاعاتی از کلاینت می دن که نمی شه با استفاده از جاوا اسکریپت یا راه های دیگه بهشون دست پیدا کرد. مثلا بخش دانلود سایت مایکروسافت، سرعت اینترنت و در نتیجه مدت زمان دانلود کردن اون فایل رو می گه. خوب اون این اطلاعات رو از کجا به دست میاره؟ از هر راهی که هست، حتما هم می تونه پردازش های مخفی شما رو در کلاینت انجام بده. مثل برخی از متغیر های php که این کار رو می کنن و از هزار چیز خبر می دن! من پیشنهاد می کنم که در مورد پروتکل ها خصوصا http تحقیق کنین و اطلاعات کاملی بدست بیارین. در مورد استاندارد های برقراری ارتباط با یک رایانه در شبکه تحقیق کنین. تا بتونین راهی غیر از اسکریپت ها پیدا کنین. نکته ی دیگه هم این که می تونین برای ارسال کد های جاوا اسکریپت از آژاکس و پروتکل https استفاده کنین که در وسط راه کسی نتونه اونا رو تغییر بده. اما برای پردازش های سمت کلاینت که امن هستن، تا می تونین در php از متغیر ها ی کنترلی سمت کلاینت استفاده کنین.

Alireza_Salehi
جمعه 25 تیر 1389, 19:21 عصر
به دلایلی که استاد موسوی و دگر اساتید و دوستان توضیح دادند ، هیچ راهی برای امن ساختن JavaScript نیست و چون Ajax هم عنصری از همین خاندان هست ، پس زیاد نمی شه روی امنیت کد و امنیت در حال Transfer داده ها مانور داده ، بهترین راهی که من به ذهن رسیده ، تشخیص هویت سمت سرور هست که همین روش رو پیاده کردم و شخصا متوجه امکان تحدید نشدم؟!
وقتی پارامتر ها با دسترسی کاربر فعلی چک بشه ، دیگه هر جور هم پرامتر تغیر کرده باشه ، مشکلی پیش نمی یاره !!!!
پارامتر با دسترسی مقایسه می شه و چون دسترسی به اون بخش نداره پس چندتا پیام محترمانه به کاربر مبنی بر اینکه پارامتر ها دستکاری شده و در صورت تکرار برای برسی دلیل کار ، کد کاربری و IP اون ضبط می شه و در صورت تکرار مجدد کاربر در حالت تعلیق در می یاد؟! (کد کاربر و رمز عبور موقتا مسدود می شه).
البته این کار واجب نیست ، چون اگه کاربر 1000 بار هم که درخاست به سرور داشته باشه ، پاسخ سرور منفی خواهد بود و این کار برای شناسایی کاربر و جلوگیری از حدر رفتن منابع سرور هست.
به نظرم روش کاملا امنی باید باشه چون تمام کار های امنیتی در سمت سرور انجام می شه و برای دسترسی ها هم از SQL استفاده می شه .

خوب اساتید و دوستان نظرشون رو بدن و اگر تحدیدی برسر راه هست ممنون می شم یادآوری کنید.
ارادتمند همه عزیزان.
تا زمانی که لازم نباشه کاربر چیزی از سرور دریافت یا به سرور ارسال کنه، امنیتی هملازم نیست. وقتی هم که ارتباطی با سرور برقرار میشه سمت سرور میشه همه چیز رو چک کرد.

ضمن این که یک سری اصول ساده هست که با رعایت اونها تهدیدات به حداقل میرسه.
این روشهایی هم که دوستان معرفی کردند همگی به امنیت انتقال اطلاعات برمیگرده و در نهایت کدهای امنیتی سمت کلاینت همگی قابل مشاهده اند. و فایل اسکریپت کاملا دیده میشود.



من فقط 13 سالمه و تازه دو ساله که برنامه نویسم. اگه اشکالی بود ببخشید و تذکر بدید.

شما برای این کار می تونید همون طور دوستان گفتن، اگر از php استفاده کنین، با استفاده از Echo واگر از ASP.NET از Response.Write استفاده کنین تا اسکریپت های مربوط به هر صفحه رو بفرستید. اما برای پردازش های محرمانه!!!! : اگه اهل پر و پا قرص اینترنت باشین و به سایت های بزرگ نرم افزاری سری بزنین، می بینین که اون ها اطلاعاتی از کلاینت می دن که نمی شه با استفاده از جاوا اسکریپت یا راه های دیگه بهشون دست پیدا کرد. مثلا بخش دانلود سایت مایکروسافت، سرعت اینترنت و در نتیجه مدت زمان دانلود کردن اون فایل رو می گه. خوب اون این اطلاعات رو از کجا به دست میاره؟ از هر راهی که هست، حتما هم می تونه پردازش های مخفی شما رو در کلاینت انجام بده. مثل برخی از متغیر های php که این کار رو می کنن و از هزار چیز خبر می دن! من پیشنهاد می کنم که در مورد پروتکل ها خصوصا http تحقیق کنین و اطلاعات کاملی بدست بیارین. در مورد استاندارد های برقراری ارتباط با یک رایانه در شبکه تحقیق کنین. تا بتونین راهی غیر از اسکریپت ها پیدا کنین. نکته ی دیگه هم این که می تونین برای ارسال کد های جاوا اسکریپت از آژاکس و پروتکل https استفاده کنین که در وسط راه کسی نتونه اونا رو تغییر بده. اما برای پردازش های سمت کلاینت که امن هستن، تا می تونین در php از متغیر ها ی کنترلی سمت کلاینت استفاده کنین.
تمام سایت هایی فراتر از دسترسی مرورگر اطلاعاتی به شما می دهند افزونه ای پس از تائید شما روی کامپیوتر تان نصب می کنند مثل اکتیو ایکس و از طریق اون اطلاعات سخت افزاری و ... رو از کامپیوتر شما بدست می آورند.

راهی غیر از اسکریپت برای کار سمت کلاینت در حال حاظر وجود ندارد.

abizaki
شنبه 26 تیر 1389, 18:03 عصر
تا زمانی که لازم نباشه کاربر چیزی از سرور دریافت یا به سرور ارسال کنه، امنیتی هملازم نیست. وقتی هم که ارتباطی با سرور برقرار میشه سمت سرور میشه همه چیز رو چک کرد.

ضمن این که یک سری اصول ساده هست که با رعایت اونها تهدیدات به حداقل میرسه.
این روشهایی هم که دوستان معرفی کردند همگی به امنیت انتقال اطلاعات برمیگرده و در نهایت کدهای امنیتی سمت کلاینت همگی قابل مشاهده اند. و فایل اسکریپت کاملا دیده میشود.



تمام سایت هایی فراتر از دسترسی مرورگر اطلاعاتی به شما می دهند افزونه ای پس از تائید شما روی کامپیوتر تان نصب می کنند مثل اکتیو ایکس و از طریق اون اطلاعات سخت افزاری و ... رو از کامپیوتر شما بدست می آورند.

راهی غیر از اسکریپت برای کار سمت کلاینت در حال حاظر وجود ندارد.

ولی ببخشین. پس php بعضی از اطلاعات رو از کجا در میاره؟ آیا php برای خودش در همه ی سیستم عامل ها افزونه(plugin) یا ActiveX داره؟ در ضمن بعضی از سیستم های امنیتی بدون افزونه ها می تونن حتی شماره سریال مادر بورد ها رو هم بدست بیارن. مثل نرم افزار هایی که مثلا حد اکثر فقط روی 3 کامپیوتر نصب می شن و برای نصب کردنشون هم باید به اینترنت وصل بود تا اون سرور با شماره های سریال سخت افزار ها کامپیوتر مورد نظر رو بشناسن.

LORD AELX
شنبه 26 تیر 1389, 19:25 عصر
ولی ببخشین. پس php بعضی از اطلاعات رو از کجا در میاره؟ آیا php برای خودش در همه ی سیستم عامل ها افزونه(plugin) یا ActiveX داره؟ در ضمن بعضی از سیستم های امنیتی بدون افزونه ها می تونن حتی شماره سریال مادر بورد ها رو هم بدست بیارن. مثل نرم افزار هایی که مثلا حد اکثر فقط روی 3 کامپیوتر نصب می شن و برای نصب کردنشون هم باید به اینترنت وصل بود تا اون سرور با شماره های سریال سخت افزار ها کامپیوتر مورد نظر رو بشناسن.

یکسری اطلاعات رو که از هدر های HTTP میشه بدست آورد. پلاگین هم چیزی نیست که روی سیستم موجود باشه، در واقع یه برنامه کوچکه که با اجازه کاربر به مرورگر اضافه میشه و البته به تمام سیستم دسترسی داره.
ضمنا امکان نداره که نرم افزارهای تحت وب چنین اجازه ای داشته باشند، مگر اینکه به نوعی اجازه دسترسی را از قبل دریافت کرده باشند، هر چند غیر قانونی.

aminghaderi
شنبه 26 تیر 1389, 22:37 عصر
ولی ببخشین. پس php بعضی از اطلاعات رو از کجا در میاره؟ آیا php برای خودش در همه ی سیستم عامل ها افزونه(plugin) یا ActiveX داره؟ در ضمن بعضی از سیستم های امنیتی بدون افزونه ها می تونن حتی شماره سریال مادر بورد ها رو هم بدست بیارن. مثل نرم افزار هایی که مثلا حد اکثر فقط روی 3 کامپیوتر نصب می شن و برای نصب کردنشون هم باید به اینترنت وصل بود تا اون سرور با شماره های سریال سخت افزار ها کامپیوتر مورد نظر رو بشناسن.
خوب خودت بهش اشاره کردی دیگه:

نرم افزار هایی که مثلا حد اکثر فقط روی 3 کامپیوتر نصب می شن و برای نصب کردنشون هم باید به اینترنت وصل بود تا اون سرور با شماره های سریال سخت افزار ها کامپیوتر مورد نظر رو بشناسن
وقتی نرم افزار داره روی سیستم نصب می شه ؟! خوب توی خود c# هم کلاس هایی هستند که از اطلاعات کامل سخت افزاری و سیستم عامل رو بگشت می دهند ، خوب اصلاعات رو که برنامه گرفته ، یه اتصال به سرور هم برقرار می کنه (درصورت کانکت بودن به اینترنت و اجازه از طرف کاربر) و اطلاعات مورد نیاز رو به سرور ارسال می کنه و در سرور هم ریجستر می شه و بعد پاسخ به نرم افزار فرستاده می شه (مثلا همون سریال منحصر به فرد ، که طبق الگریتمی می یاد یه کدی رو با توجه به سریال سخت افزاری - Main Bord - Network Card و... برای PC شما ایجاد می کنه).
و داخل سرور هم ثبت می شه که یک بار این نرم افزار به نام آقای X ثبت شده .
یه پروسه برنامه نویسی هست و کار خاصی نیست ؟!
اما به قول الکس اگه بخواد برنامه تحت وب این کار رو انجام بده ، باید برای سیستم عامل فابلی رو ارسال کنه که اون فایل اجرا بشه (با اجازه کاربر سیستم) و اطلاعات رو بفرسته.
که معمولا این کار ها انجام نمی شه مگر یه اینترانت خیلی امنیتی باشه که لازم اطلاعات Nod های کانکت به سایت (سریال های و اطلاعات سخت افزاری) رو کامل داشته باشه؟!
موفق باشی.

Alireza_Salehi
یک شنبه 27 تیر 1389, 00:52 صبح
پروتکل HTTP مجوز دسترسی به کامپیوتر کاربر رو ندارند. حتی سیلورلایت، فلش، جاوا و ... هم پس از مجوز کاربر می توانند به وب کم یا امثالهم دسترسی پیدا کنند.
تنها چیزی که سمت کاربر از طرف مرورگر قابل ذخیره سازی هست کوکی ها هستند.( به HTML 5 کاری نداریم.)

برای دسترسی به کامپیوتر کاربر (کلاینت) باید افزونه ای روی مرورگر نصب بشه و مرورگر از طریق اون به همه اطلاعات کامپیوتر کلاینت دسترسی داره.

در اینترنت اسپلورر این کار معمولا از طریق اکتیو ایکس انجام میشه.
مثلا ویروس اسکنر آنلاین سیمانتک http://security.symantec.com/sscv6/WelcomePage.asp
یا اسکنر درایور http://driveragent.com/ (http://driveragent.com/0/scan_step1?r=4) که درایورهای سخت افزاری شما رو بررسی میکنه.

قبل از این که تمام اینها بتونند کاری انجام دهند باید تایید کاربر گرفته بشه که عکسش رو برای سایت DriverAgent در فایرفاکس و اینترنت اکسپلورر ضمیمه کردم.

قدیم تر ها سایت ها شما رو مجبور میکردن برای چنین کارهایی از اینترنت اکسپلورر استفاد هکنید ولی جدیدا بقیه مرورگرها هم چنین امکانی رو مشابه اکتیو ایکس دارند.
هر زبون برنامه نویسی تحت وبی هم باید از این ها استفاده کنه فرقی هم در این کار بین PHP و ASP.NET و ... نیست.

Mahdi-563
یک شنبه 27 تیر 1389, 02:45 صبح
نمی دونم این به دردت می خوره یا نه ولی من با .htaccess این کار رو کردم و حتی css

abizaki
یک شنبه 27 تیر 1389, 15:51 عصر
خوب خودت بهش اشاره کردی دیگه:

وقتی نرم افزار داره روی سیستم نصب می شه ؟! خوب توی خود C#‎ هم کلاس هایی هستند که از اطلاعات کامل سخت افزاری و سیستم عامل رو بگشت می دهند ، خوب اصلاعات رو که برنامه گرفته ، یه اتصال به سرور هم برقرار می کنه (درصورت کانکت بودن به اینترنت و اجازه از طرف کاربر) و اطلاعات مورد نیاز رو به سرور ارسال می کنه و در سرور هم ریجستر می شه و بعد پاسخ به نرم افزار فرستاده می شه (مثلا همون سریال منحصر به فرد ، که طبق الگریتمی می یاد یه کدی رو با توجه به سریال سخت افزاری - Main Bord - Network Card و... برای PC شما ایجاد می کنه).
و داخل سرور هم ثبت می شه که یک بار این نرم افزار به نام آقای X ثبت شده .
یه پروسه برنامه نویسی هست و کار خاصی نیست ؟!
اما به قول الکس اگه بخواد برنامه تحت وب این کار رو انجام بده ، باید برای سیستم عامل فابلی رو ارسال کنه که اون فایل اجرا بشه (با اجازه کاربر سیستم) و اطلاعات رو بفرسته.
که معمولا این کار ها انجام نمی شه مگر یه اینترانت خیلی امنیتی باشه که لازم اطلاعات Nod های کانکت به سایت (سریال های و اطلاعات سخت افزاری) رو کامل داشته باشه؟!
موفق باشی.
ببخشید حواسم به این نبود که خود نرم افزار این اطلاعات رو می فرسته. چون من زیاد روی وب کار می کنم، چیزای دیگه از نوک ذهنم پاک شد.