PDA

View Full Version : گفتگو: ایجاد چند بحث در مورد مسائل امنیتی php و چگونگی ایمن سازی و وظایف و باید و نبایدهای برنامه نویسی



leaping
دوشنبه 21 دی 1394, 11:08 صبح
سلام دوستان
اخیرا رد رابطه با یک پروژه چند مشکل برام ایجاد شد که دوس داشتم به نوبه خودم اون رو هم با شما در میون بگذارم

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

حالا این برام سوال شد که بقیه برنامه نویسهای عزیز هم با همچین مشکلی رو به رو شدن؟
آیا این مربوط به ضعف برنامه نویسی من میشه و یا اینکه خیلی چیزا واقعا امکان پذیر نیست در این رابطه , چون یه جایی حس کردم این مربوط به کار دوستان هکر میشه و یه جا دیگه هم یاد این افتادم
که وب سایتهایی مثل filgir یا rapidbaz کارهای مشابهی میکردن ... لاگین شدن به وب سایت اشتراک فایل از طریق curl

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

amin1softco
دوشنبه 21 دی 1394, 11:21 صبح
سلام دوستان
اخیرا رد رابطه با یک پروژه چند مشکل برام ایجاد شد که دوس داشتم به نوبه خودم اون رو هم با شما در میون بگذارم

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

حالا این برام سوال شد که بقیه برنامه نویسهای عزیز هم با همچین مشکلی رو به رو شدن؟
آیا این مربوط به ضعف برنامه نویسی من میشه و یا اینکه خیلی چیزا واقعا امکان پذیر نیست در این رابطه , چون یه جایی حس کردم این مربوط به کار دوستان هکر میشه و یه جا دیگه هم یاد این افتادم
که وب سایتهایی مثل filgir یا rapidbaz کارهای مشابهی میکردن ... لاگین شدن به وب سایت اشتراک فایل از طریق curl

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

curl به نظرت کد های جاوا اسکریپت را اجرا می کنه ؟ و وقتی سایتی برای لاگین شدن از کد ها جاوا اسکریپت یا آجکس استفاده کنه شما عملاً با curl نمی تونی بهش لاگین کنی و حرکتی انجام بدی ... برای این کار باید از شبیه ساز مرورگر استفاده کنی https://github.com/facebook/php-webdriver و با یک سرچ ساده می تونستی تمام این چیزایی که من گفتمو روی استک پیدا کنید... حتی کار هایی مثل پست زدن که در api اینستاگرام غیر ممکن با این روش ممکن می شه...

0xEHSAN
دوشنبه 21 دی 1394, 11:45 صبح
درود دوست عزیز اینکه شما نتونستید به اینستا وصل بشید یک موضوع عادی هست تو برنامه نویسی تو برنامه نویسی شکست عیب نیست نا امید شدن عیبه در صورتی که شما وقتی که نتونستید و از اون راه شکست خوردید علتش رو پیدا کنید و اونو در نظر بگیرید و اگه با بهبود راه حل میشه این مشکل رو حل کرد که خوب و گرنه راه حل رو تغییر بدید برای مثال اپلیکیشن اندرویدی رو اسنیف کنید و یا نرم افزار های مرتبط رو و درخواست ها رو جعل کنید و یا و یا خلاقیت بکار بگیرید که چطوری بایپسش کنید این کار غیر ممکن نیست همین چند وقت پیش یک نوجوان 9 یا 11 ساله از طریق همین API ها و از کامپیوتر تونست تصویر بذاره تو اینستاگرام نگیم دوستان هکر بگیم دوستانی که قوانین کار رو بلدن

leaping
دوشنبه 21 دی 1394, 11:45 صبح
curl به نظرت کد های جاوا اسکریپت را اجرا می کنه ؟ و وقتی سایتی برای لاگین شدن از کد ها جاوا اسکریپت یا آجکس استفاده کنه شما عملاً با curl نمی تونی بهش لاگین کنی و حرکتی انجام بدی ... برای این کار باید از شبیه ساز مرورگر استفاده کنی https://github.com/facebook/php-webdriver و با یک سرچ ساده می تونستی تمام این چیزایی که من گفتمو روی استک پیدا کنید... حتی کار هایی مثل پست زدن که در api اینستاگرام غیر ممکن با این روش ممکن می شه...
ممنون از پاسخهات برام جدید و جالب بود
اما در مورد قسمت اول حرف که با curl نمیشه درخواست ajax فرستاد اشتباه میکنی
میشه اینکارو کرد

leaping
دوشنبه 21 دی 1394, 11:49 صبح
درود دوست عزیز اینکه شما نتونستید به اینستا وصل بشید یک موضوع عادی هست تو برنامه نویسی تو برنامه نویسی شکست عیب نیست نا امید شدن عیبه در صورتی که شما وقتی که نتونستید و از اون راه شکست خوردید علتش رو پیدا کنید و اونو در نظر بگیرید و اگه با بهبود راه حل میشه این مشکل رو حل کرد که خوب و گرنه راه حل رو تغییر بدید برای مثال اپلیکیشن اندرویدی رو اسنیف کنید و یا نرم افزار های مرتبط رو و درخواست ها رو جعل کنید و یا و یا خلاقیت بکار بگیرید که چطوری بایپسش کنید این کار غیر ممکن نیست همین چند وقت پیش یک نوجوان 9 یا 11 ساله از طریق همین API ها و از کامپیوتر تونست تصویر بذاره تو اینستاگرام نگیم دوستان هکر بگیم دوستانی که قوانین کار رو بلدن
اتفاقا منم کلی راه رو امتحان کردم و فقط بحث اون راه نبود.اصولا زمانی که لازم هست بذارید رو هم باید در نظر گرفت.من ترجیحم این نیست که برای مسائلی مثل این 15 روز وقت بگذارم نمیدونم ایشون چقد وقت گذاشتن برای من که نیاز هست پروژه ها تو سریع ترین زمان ممکن به انجام برسه خیلی مهمه که سریع راه حلهارو پیدا کنم.
بیشتر دلم میخواد بدونم با مشکلات این چنینی شما چقد وقت در طول کار از دست میدین؟

0xEHSAN
دوشنبه 21 دی 1394, 20:51 عصر
اصولا تا حالا که بوده من نرفتم سراغ راه حل راه حل اومده سراغ من پیشنهادی که میتونم بدم اگه پروژه دیگه ای دارین اول اونو انجام بدین و در مرحله دوم اگه امکان اتمام پروژه رو میبینید رو بقیه قسمت های پروژه کار کنید تا که از زمان بندیتون عقب نیفتید چه پروژه انجام بشه چه نشه امتیاز با ارزشی بدست اوردید به نام تجربه سعی کنید اصول برنامه نویسی رو تو زندگی روزانه تو پیاده کنید ضرر نمیکنید

مهرداد سیف زاده
دوشنبه 21 دی 1394, 21:20 عصر
تحقیق در کاری که قراره انجام بشه خیلی مهم هست. به چند دلیل در هر پروژه‌ای ما از تحقیق و جستجو تمام روشها سرفنظر میکنیم:

روشهای قبلی رو، قبلا یاد گرفتیم، الانم دست به کد و فوری اون بخش رو درست میکنیم. پس اصلا وقتی برای روشهای جدید نمیزاریم
نیاز به وقت داره. بیشتر پروژه‌ها بصورت انفرادی نوشته میشه، و مشکل زمان تحویل+باگ‌گیری+تحویل و راه‌اندازی، اجازه وقت گذاشتن برای تست روشهای دیگه رو نمیده. حتی تست روشها میتونه خودش ۱/۳ زمان رو در بر بگیره، که به‌صرفه نیست
قبلا روشهای یاد گرفته شده تست شده و داره کار میکنه، پس لزومی نداره وقت بزاریم و روشهای جدید رو یاد بگیریم
بعضی روشهای جدید نیاز به سطح بالایی از دانش هست. مثلا curl صرفا باید موارد پایه رو یاد بگیرید و با گرفتن نمونه کد از اینترنت راه میفته، ولی api نیاز به خوندن document، و تست ماژولهای نوشته در زبان مورد نظر هست. چون در نگاه اول curl‌مسیر ساده‌ای هست از اون استفاده میکنیم


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


sql یا NoSQL
معمولا برنامه‌نویسان php با mysql‌ خوی گرفتن و بصورت پیش‌فرض دیتابیس این زبان هست. ولی آیا همه جا باید از این دیتابیس استفاده بشه؟ مثلا پروژه‌ای رو در نظر بگیرید که ۵۰ دسته بندی داره، بعضی از این دسته‌ها به فیلدهای زیادی نیاز داره مثلا نام، نام‌خانوادگی، موبایل و آدرس و ... ولی بعضی دسته‌ها فیلد کمی نیاز داره و صرفا باید کد‌ملی یا شماره تلفن برای اون دسته وارد بشه. با این اوصاف آیا mysql برای این پروژه به صرفه هست؟ توجه کنید که join‌ در mysql‌چقدر روی performance تاثیر داره. جواب خیر. و این موردی که در یک پروژه بهش برخورد کردم و بعد از تحقیقات و تست به این نتیجه رسیدم که پروژه باید دیتابیس mongodb کار کنه. تنهای معایب این روش نصب نبودن بر روی هاست اشتراکی و مشتری باید سرور تهیه کنه. که البته بسته به بزرگ بودن کار این مورد قابل چشم پوشی بود.
ajax یا websocket
مورد websocket با html5 معرفی شد. بعد از مدتی NodeJS مکمل اون شد و خیلی از سایتها چت ‌هایی بسیار قوی با اون درست کردن. نمونه تلگرام. ولی این مورد نیاز به یادگیری و مطالعه داره و گذشته از اون node بصورت پیش‌فرض بر روی هاست‌ها نصب نیست و برنامه‌نویس تصمیم میگیره از روش قدیمی خودش که فرستادن ajax در نیم ثانیه و یا در نهایت از کامیت استفاده کنه. معایب این روش میتونه مرورگرهای قدیمی باشه که websocket رو ساپورت نمیکنن.
curl یا api
بیشتر سایتهای بزرگ برای تنوع خدمات خودشون وو این که ثابت کنن یه سرویس بسیار قوی دارن، api رو راه اندازی کردن. معمولا این api تکمیل هستن. یعنی هر کاری که توی gui سایت قابل انجام هست، توسط api هم قابل انجام هست. اکثرا از سه فناوری WSDL,SOAP,RestFul استفاده میشه. ولی باز هم برنامه‌نویسان چون از قدیم از curl بهره بردن و جواب هم داده همچنان به اون وفادار هست. api معمولا پایدار هست، یا تغییرات رو طوری اعمال میکنن که استفاده کنندگان سیستم‌هاشون قطع نشه ولی از بزرگترین معایب curl تغییر gui‌یا مسیرهای submit هست.

من چند مورد که خیلی نسبت به قدیم به چشم میخوره لیست کردم و قطعا دوستان دیگری میتونن تجارب بیشتری بهش اضافه کنن.

اما راه حل رو بازم لیست میکنم:

شما راضی و مشتری هم راضی. اگر پروژه با هر فناوری نوشته شده الان داره کار میکنه و تست‌ها هم موفق آمیز بوده. پس استفاده از فناوری قدیمی تا وقتی مشکلی در سایت پیش نیومده میتونه بکار گرفته بشه و زیادی هم حساس نشید. ولی بهتره روشهای جدیدتر رو هم تستی بگیرید شاید روزی اون قسمت از پروژه بدلیل فناوری قدیمی از کار بیفته و شما در شرایط بدی برای بروز رسانی قرار بگیرید
مشتری راضی ولی شما وجدانتون نارحته. بله این مورد برای خیلی ها پیش میاد. اگر روشهای جدید بکار گرفته میشد، سرعت و دقت بیشتری داشت و مشتری هم خوشحال‌تر میشد. ولی این عذاب وجدان در شما هست که بدلیل وقت یا هر مشکل دیگری نتونستید روشهای جدید رو استفاده کنید. در اولین فرصت راهی برای رفع عذاب وجدانتون پیدا کنید، مثلا مشتری رو متقاعد کنید برای بروز رسانی اون قسمت یه مبلغی در نظر بگیره. البته باید بیشتر از قبل بر سر قیمت باهاش راه بیاید.
مشتری ناراضی و شما هم قبول دارید کار بد انجام شده. این شرایط خیلی بده باید زودتر برطرف بشه. مشتری برای پروژه هزینه کرده و شما در زمان مورد نظر نتونستید، بهترین روش رو پیاده سازی کنید. مشتری حقش ضایع شده. این جا فقط گرفتن زمان بیشتر میتونه مشکل رو حل و اگر هم رفع اون مشکل داره با مشتری حرف بزنید و متقاعدش کنید اون موقع بسته به زمان و شرایط، روشهای قبلی استفاده شد، و برای رفع باگ و استفاده از روش جدید باید مبلغی رو بده. شاید مشتری از اختصاص مبلغی بیشتر به پروژه سر باز بزنه و شمار رو مجبور کنه که باید بدون دریافت هزینه برطرفش کنید، خب این‌جا دیگه باید از خودتون بگذرید و این ضرر رو بپذیرید و تجربه‌ای باشه برای پروژه‌های بعدی که مطالعه و پیدا کردن روش مناسب رو انجام بدید


با توجه به موارد بالا و تجاربی که خودم داشتم، همیشه مطالعه داشته باشید و تمام فناوری‌های رو در حد مطالعه و یا نصب و راه‌اندازی اولیه انجام بدید. این دید بزرگی به شما میده و در انجام پروژه‌ها با اعتماد به نفس و تسلط بیشتری کار رو انجام میدید
آرزوی موفقیت و پیشرفتهای بیشتر برای تمام برنامه‌نویسان عزیز.

Unique
سه شنبه 22 دی 1394, 02:49 صبح
در مورد مشکلی که با CURL خوردی راستش نمیدونم دقیقا چیکار کردی اما با CURL به شرطی که یکسری از امکاناتش توسط php.ini محدود نشده باشه دقیقا میشه مثل یک مرورگر کار کرد. اما به این راحتی ها که میگی نیست ، ست کردن درست Cookie ها ، دنبال کردن Redirect ها و ... کلا کار ساده ای هم نیست.


آیا این مربوط به ضعف برنامه نویسی من میشه و یا اینکه خیلی چیزا واقعا امکان پذیر نیست در این رابطه , چون یه جایی حس کردم این مربوط به کار دوستان هکر میشه و یه جا دیگه هم یاد این افتادم که وب سایتهایی مثل filgir یا rapidbaz کارهای مشابهی میکردن ... لاگین شدن به وب سایت اشتراک فایل از طریق curl

ببین کلا کار غیر ممکنی به این شکلی که میگی نیست ، موضوع هم ضعف برنامه نویسی نیست ممکنه کسی مشکلی از نظر کدنویسی و تحلیل برنامه نداشته باشه اما آگاهیش از موضوعات دیگه کم باشه ،‌ مثلا شما ممکنه پروتکل HTTP را خیلی خوب نشناسی یا در حای دیگه در مورد لایه های شبکه و بحث IP خیلی ندونی ، مثلا همینکه فکر میکنی Filegir برای دانلود فایل ها از rapidgator و uploaded و غیره نیاز به CURL داره در اشتباهی.

اینکه برنامه نویس در مورد موضوعاتی اطلاعات کامل نداشته باشه ربطی به توانایی کدنویسی و تحلیلش نداره. کلا هر چقدر پروژه های متفاوت تر و با چالش بیشتری انجام بدی بیشتر یاد میگیری. نمیدونم برای یادگیری کار با CURL و استفاده ازش بجای API خود Instagram چقدر وقت گذاشتی اما با توجه به استدلالت کم بوده ! آقای سیق زاده هم به موارد خوبی اشاره کردن که خوندنش توصیه میشه.

leaping
سه شنبه 22 دی 1394, 07:39 صبح
ممنون از پاسخهای همه دوستان
بله قطعا مطالعاتم در زمینه curl انقد زیاد نبوده و نمیتونم بدون سرنخ هم همه مباحث رو یاد بگیرم
گشت زدن توی وب سایتهای stackoverflow هم بدون اینکه بدونی دقیقا دنبال چی هستی واقعا سخته تاپیک زدن اونجام هفته ها زمان میبره
همینکه فک میکردم فایل گیر اینکارو میکنه پس در اشتباه بودم اما دقیقا چیکار میکنن اینا?
اقای سیف زاده به موارد خیلی خوبی اشاره کردن یکی از مهمترین چیزهایی که من کم دارم وقته
ممنون میشم در مورد مباحث این چنینی تجربیاتشون رو بگن
چالش هایی که داشتن و موفق به حل شدنش شدن
نیاز نیست دوستان بیان توضیحات ریز به ریز بدن همینکه بیان بگن چالش چی بوده و چند سرنخ در مورد روش حلش بگن به علم ماهم افزوده میشه ☺

0xEHSAN
سه شنبه 22 دی 1394, 08:46 صبح
درود من این لینک رو پیشنهاد میکنم https://www.google.com/search?q=instagram+api+example&newwindow=1&sa=G&hl=fa&gbv=1&sei=tYiUVuXIDciHaNKcjfgJ


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

مساله : نوشتن برنامه ای برای ارتباط با اینستاگرام

اطلاعاتی که دارم : برنامه نویسی php و کتابخانه jquery و آچاکس

چالش : شناخت و ارتباط بین اینستاگرام و برنامه نویسی

مرحله اول : جمع آوری اطلاعات (موتورهای جستجو و سایت :
1- پیدا کردن رابطه برنامه نویسی و اینستاگرام و جمع آوری مستندات و کلمات کلیدی
2- پیدا کردن رابطه پی اچ پی و اینستاگرام
3- پیدا کردن مثال ها و نمونه کدها
4- پیدا کردن نمونه خطاها با این شیوه های برنامه نویسی

مرحله دوم : پایش اطلاعات
1- بر اساس اطلاعاتی که بدست اوردم تو مرحله 1 اطلاعاتمو تکمیل میکنم
2- شناخت نیازهام بر اساس اطلاعات جدید و نمونه های مطالعه شده
3- بررسی راههای بهینه بین نیازهای برنامه نویسی خودم و اطلاعاتی که پیدا کردم

مرحله سوم : برنامه نویسی و پیاده سازی اطلاعات
1- بر اساس نیازها و راه حل هایی که پیدا و بررسی کردم برنامه نویسی مو انجام میدم
2- برنامه رو تست میکنم تا درست کار کنه و عیبی نداشته باشه


مرحله چهارم : عیب یابی
1- برنامه خودمو به چالش میکشم و تا باگ ها و خطاهای احتمالی پیدا بشن
2- با اسکنرهای باگ ها اسکریپتم رو اسکن میکنم که احتمال باگ و خطا
3- خطاهای احتمالی رو رفع میکنم
4- چندبار این مرحله رو تکرار میکنم تا حتی عیب هایی رو هم که رفع کردم خودشون عیب نباشن


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

leaping
سه شنبه 22 دی 1394, 09:22 صبح
بسیار عالی منم استقبال میکنم اگر اطلاعات مفیدی به دست آوردین (که حتما میارید) با ما در میون بگذارید.

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