6 پاسخ

مخفی کردن یا کد گذاری کدهای مربوط به کوئری ها

سلام خسته نباشید ❤️
من یه پروژه دارم با لاراول نوشته ام و تیم امنیتی بهم گفته اند که کدت باید ناخوانا بشه طوری که اگر دست کسی افتاد به هر دلیلی نتونه از ساختار دیتابیست سر در بیاره
مثلا با دیدن این کد :

 $flights_plane_type = $this->flight->groupBy(['type_id'])
                ->with(['type'])
                ->whereIn('type_id',$types)
                ->whereBetween('flight_date',[$rep_date_from,$rep_date_to])
                ->get([
                    'type_id',
                    \DB::raw('SUM(flight_total_time) as "total_plane_type_time"'),
                ]);

میتونه تشخیص بده جدول مثلا flights یه ستون داره به اسم typeid و flighttotaltime
خیلی گشتم تو اینترنت ولی به جوابی که میخواستم نرسیدم.

چیزی که من میخوام به زبان ساده اینه که بتونم ستون ها رو تغییر نام بدم مثلا جای typeid بزنم مثلا TYPERDGF
بعضی ها گفته بودن که یکی از نرم افزارها رو نصب کن و کدهاتو کد گذاری کن. اما من نمیخوام همه کدها رو رمزگذاری کنم.
Zend Guard
IonCube
SourceGuardian
phpbolt
etc.
اما اینها پولی هستن و نسخه های کرک شده اینها php 7 رو ساپورت نمیکنه.از طرفی برای اجرای کد توی سرور هم باید extension رو بذارم توی فولدر php ->extensions که باز این کار غیر ممکنه چون اجازه گذاشتن اکستنشن رو هم به من نمیدن.(برای امنیت)
یه پکیج هم بود که یه ایرانی نوشته بود اونم نتونست کمکم کنه تست کردم ایراد داشت موقع اجرا. اینم لینک https://github.com/SiavashBamshadnia/Laravel-Source-Encrypter
(اینها رو نوشته ام که در جواب اینها رو ننویسید.😁
حالا راهی به نظرتون میرسه که منو کمک کنید ممنون میشم.
اضطراری به کمک احتیاج دارم ممنونم.


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
0

@ali.kalan

خواهش میکنم.
نکته ای که شما باید توجه داشته باشید اینه که: PHP یک زبان تفسیری هست.. اما این به چه معناست؟

هر وقت که شما قطعه کدی رو اجرا می‌کنید، چه یک کد کوتاه و ساده باشه.. و چه یک وب اپلیکیشن کامل.. این پروسه از طریق interpreter یا مفسر PHP صورت میگیره. که متداول ترین اونها PHP FPM و مفسر CLI هستند.

کار این مفسر ها بسیار ساده ست: کدهای PHP رو میگیرند.. تفسیر میکنند و نتایج رو بر می‌گردونند.
این پروسه به طور معمول برای تمام زبان های تفسیری اتفاق میفته. در بعضی از زبان ها ممکنه که برخی از این مراحل حذف بشه; اما در نهایت ایده و روال کلی کار همینه.

در PHP این پروسه به شکل زیر اتفاق میفته:

  • کد شما خونده میشه و تبدیل میشه به یه سری کلیدواژه ها، که بهشون توکن (Token) میگیم. این فرایند به مفسر اجازه میده تا بدونه، کدوم قطعه کد در کدوم قسمت از برنامه قرار گرفته; که نام این مرحله Lexing یا Tokenizing هست.
  • حالا که توکن‌ها رو داریم، مفسر PHP مجموعه توکن‌ها رو آنالیز میکنه و سعی میکنه اونها رو درک کنه. در نتیجه یک "Abstract Syntax Tree" یا یک AST در پروسه ای به نام Parsing به وجود میاد. این AST مجموعه ای از گِره (Node) هاست که مشخص میکنه چه عملیاتی باید اجرا بشه.
  • حالا که AST رو داریم، درک عملیات ها و تقدم (precedence) اونها خیلی ساده‌تر میشه.. برای تبدیل این AST به کدی که قابل اجرا باشه، نیاز به یک واسطه یا Intermediate Representation (IR) داریم; که در PHP اون رو به نام Opcode می‌شناسیم... و پروسه تبدیل AST به Opcode رو کامپایل کردن (Compilation) میگیم.
  • حالا که Opcode ها رو داریم، به قسمت جالب کار می‌رسیم: اجرای کد... PHP موتوری به نام Zend VM داره، که لیستی از Opcode ها رو دریافت و اونها رو اجرا میکنه. پس از اجرای تمام Opcode ها، موتور Zend VM به کارش پایان میده و مراحل اجرای برنامه ما به پایان میرسه.

به همین خاطر هست که PHP پرفرمنس نسبتا پایینی داره..
چون مراحل زیادی باید اتفاق بیفته
حالا شما فرض کن یه پروسه Encode و Decode هم به این مراحل اضافه بشه..
مسلما این موضوع به شکل نسبی روی پرفرمنس اثر میگذاره..


سوای این، امنیت کد در زبان های سطح پایین تر مطرحه
که باید مراقب باشید با مشکلات Memory Leak روبرو نشید..

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


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

خواسته بسیار نا معقولی هست...

تمرکز اصلی یک برنامه نویس، باید نوشتن کدهای تمیز و خوانا باشه.
در واقع کوئری که بالا مثال زدی.. برای این انقدر خوانا هست که: Eloquent ابزار فوق العاده ای هست.

نوشتن کدی که کار کنه، کار سختی نیست ..
اما نوشتن کد های تمیز (Clean Code) و قابل توسعه کار نسبتا مشکلیه ..
یکی از قواعد نوشتن کد های تمیز ، اینه که کد شما خوانا باشه.

حالا
به جایی که امنیت سیستم رو مهیا کنند
از شما می‌خواند که کد رو ناخوانا کنید تا اگر کسی این فایل رو دید از ساختار دیتابیس سر در نیاره؟؟؟؟ 😐😐
اگر کسی بتونه این فایل رو ببینه که میتونه فایل ENV رو هم ببینه
که داخلش user & pass دیتابیس هست
نه تنها ساختار دیتا بیس رو بلکه میتونه کل دیتابیس رو شخم بزنه

مشکل اصلی امنیت سیستم هست.. که باید تامین بشه.


علیرضا کلانتریان
تخصص : Full-Stack Web Developer,C#,Ja...
@ali.kalan 4 سال پیش مطرح شد
0

@ali.bayat آقای مهندس بیات .
📌 اول از شما بابت پاسخگویی تشکر میکنم 🌹
📌 من قبول دارم که خواسته بسیار نا معقولی هست اما چی کار کنم وقتی اینو از من میخوان .🌝
📌 در مورد فایل env : به من گفتن کلا پروژه رو encode کن یعنی env هم شاملش میشه .
📌 منظور از امنیت سیستم ، امنیت سرور هست؟ خب باید بگم امنیت سرور با من نیست اونها ردیف میکنن . ما در مورد امنیت کد صحبت میکنیم.


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 4 سال پیش مطرح شد
2

@jafarzadeh.qut

خب باید بگم امنیت سرور با من نیست اونها ردیف میکنن . ما در مورد امنیت کد صحبت میکنیم.

تا وقتی امنیت سرور خدشه دار نشه، نفوذی نمی تونه رخ بده که امنیت کد به خطر بیفته.

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


علیرضا کلانتریان
تخصص : Full-Stack Web Developer,C#,Ja...
@ali.kalan 4 سال پیش مطرح شد
0

من این موضوع رو توی لاراکست هم پرسیدم و جواب هایی که اونها دادن رو هم دریافت کرده ام.
اونها هم همین جواب دوستان @ali.bayat و @mhyeganeh رو دقیقا داده بودن . گفته بودن که اولا مبهم سازی کد امنیت نیست . ثانیا به جای اینکار روی امنیت کلی برنامه و امنیت سرور تمرکز کن.
اما من به صورت آزمایشی با SourceGuardian تو نسخه تریال(14 روزه) هم تست کردم و جواب گرفتم . قیمت سورس گاردین که php 7 رو ساپورت کنه حدود 200 دلاره.
نمیدونم باید به جنگ کسایی که تاییده امنیتی میدن برم . یا باید از این خواسته کوتاه بیان یا باید این رو بخرن. توکل بر خدا. 😊


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
0

@ali.kalan

خواهش میکنم.
نکته ای که شما باید توجه داشته باشید اینه که: PHP یک زبان تفسیری هست.. اما این به چه معناست؟

هر وقت که شما قطعه کدی رو اجرا می‌کنید، چه یک کد کوتاه و ساده باشه.. و چه یک وب اپلیکیشن کامل.. این پروسه از طریق interpreter یا مفسر PHP صورت میگیره. که متداول ترین اونها PHP FPM و مفسر CLI هستند.

کار این مفسر ها بسیار ساده ست: کدهای PHP رو میگیرند.. تفسیر میکنند و نتایج رو بر می‌گردونند.
این پروسه به طور معمول برای تمام زبان های تفسیری اتفاق میفته. در بعضی از زبان ها ممکنه که برخی از این مراحل حذف بشه; اما در نهایت ایده و روال کلی کار همینه.

در PHP این پروسه به شکل زیر اتفاق میفته:

  • کد شما خونده میشه و تبدیل میشه به یه سری کلیدواژه ها، که بهشون توکن (Token) میگیم. این فرایند به مفسر اجازه میده تا بدونه، کدوم قطعه کد در کدوم قسمت از برنامه قرار گرفته; که نام این مرحله Lexing یا Tokenizing هست.
  • حالا که توکن‌ها رو داریم، مفسر PHP مجموعه توکن‌ها رو آنالیز میکنه و سعی میکنه اونها رو درک کنه. در نتیجه یک "Abstract Syntax Tree" یا یک AST در پروسه ای به نام Parsing به وجود میاد. این AST مجموعه ای از گِره (Node) هاست که مشخص میکنه چه عملیاتی باید اجرا بشه.
  • حالا که AST رو داریم، درک عملیات ها و تقدم (precedence) اونها خیلی ساده‌تر میشه.. برای تبدیل این AST به کدی که قابل اجرا باشه، نیاز به یک واسطه یا Intermediate Representation (IR) داریم; که در PHP اون رو به نام Opcode می‌شناسیم... و پروسه تبدیل AST به Opcode رو کامپایل کردن (Compilation) میگیم.
  • حالا که Opcode ها رو داریم، به قسمت جالب کار می‌رسیم: اجرای کد... PHP موتوری به نام Zend VM داره، که لیستی از Opcode ها رو دریافت و اونها رو اجرا میکنه. پس از اجرای تمام Opcode ها، موتور Zend VM به کارش پایان میده و مراحل اجرای برنامه ما به پایان میرسه.

به همین خاطر هست که PHP پرفرمنس نسبتا پایینی داره..
چون مراحل زیادی باید اتفاق بیفته
حالا شما فرض کن یه پروسه Encode و Decode هم به این مراحل اضافه بشه..
مسلما این موضوع به شکل نسبی روی پرفرمنس اثر میگذاره..


سوای این، امنیت کد در زبان های سطح پایین تر مطرحه
که باید مراقب باشید با مشکلات Memory Leak روبرو نشید..

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


علیرضا کلانتریان
تخصص : Full-Stack Web Developer,C#,Ja...
@ali.kalan 4 سال پیش مطرح شد
0

@ali.bayat
این جوابی که شما نوشتید واقعا کامله من قانع شدم. منم سعی میکنم قانعشون کنم اگر هم نشدن از یکی از ابزارهای سوم شخص باید استفاده کرد به ناچار.
البته یه سری ابزارها و پکیج ها هستن که به مبهم سازی کدها کمک میکنه و اون رو با استفاده از php parser مبهم میکنه مثل YAK Pro - Php Obfuscator

این رو هم امتحان کردم و جواب گرفتم.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام