Electron অ্যাপ্লিকেশনে ফাইল সিস্টেমে অ্যাক্সেস অত্যন্ত গুরুত্বপূর্ণ এবং এটি নিরাপত্তা ঝুঁকি তৈরি করতে পারে যদি ঠিকভাবে কনফিগার না করা হয়। ফাইল সিস্টেমের সঙ্গে ইন্টারঅ্যাক্ট করার সময় সঠিক নিরাপত্তা নিয়মাবলী অনুসরণ করা অত্যন্ত জরুরি। কারণ Node.js এর fs (ফাইল সিস্টেম) মডিউল ব্যবহার করে অ্যাপ্লিকেশন ফাইল পড়তে এবং লিখতে সক্ষম হয়, যা ইউজারের তথ্য বা সিস্টেমে প্রবেশ করতে পারে।
নিচে কিছু নিরাপত্তা নিয়মাবলী দেওয়া হলো, যা Electron অ্যাপ্লিকেশনের ফাইল সিস্টেমে অ্যাক্সেসের সময় মানা উচিত:
১. Node.js ইন্টিগ্রেশন সীমিত করা
nodeIntegration একটি গুরুত্বপূর্ণ নিরাপত্তা সেটিং, যা Renderer Process-এ Node.js এর API ব্যবহার করার অনুমতি দেয়। এই সেটিংটি true থাকলে Renderer Process এ Node.js এর fs মডিউল এবং অন্যান্য সিস্টেম API ব্যবহার করা যাবে, যা বড় ধরনের নিরাপত্তা ঝুঁকি সৃষ্টি করতে পারে।
নিরাপদ পদ্ধতি:
nodeIntegrationকেfalseরাখা উচিত, যাতে Renderer Process শুধুমাত্র ওয়েব API গুলি ব্যবহার করতে পারে।
উদাহরণ:
let mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: false, // Renderer Process-এ Node.js API নিষ্ক্রিয় করা
contextIsolation: true, // নিরাপত্তার জন্য contextIsolation সক্রিয় করা
}
});
contextIsolation: trueসক্রিয় রাখলে, Renderer Process এবং Main Process এর মধ্যে পৃথক কনটেক্সট বজায় থাকে, যা নিরাপত্তা বাড়ায়।
২. IPC (Inter-Process Communication) ব্যবহার করুন
ipcMain এবং ipcRenderer ব্যবহার করে আপনি Main Process এবং Renderer Process এর মধ্যে নিরাপদ যোগাযোগ করতে পারেন। আপনি শুধুমাত্র Main Process এ ফাইল সিস্টেমের কাজ পরিচালনা করতে পারেন এবং Renderer Process এ সরাসরি ফাইল সিস্টেমে অ্যাক্সেস সীমিত রাখতে পারেন।
নিরাপদ পদ্ধতি:
- Renderer Process থেকে Main Process এ শুধুমাত্র নিরাপদ মেসেজ পাঠান, এবং ফাইল সিস্টেমের কাজ সেখানে পরিচালনা করুন।
উদাহরণ:
// Main Process (main.js)
const { ipcMain } = require('electron');
const fs = require('fs');
ipcMain.on('read-file', (event, path) => {
// শুধুমাত্র নির্দিষ্ট পাথ থেকে ফাইল পড়ুন
fs.readFile(path, 'utf8', (err, data) => {
if (err) {
event.reply('file-error', 'ফাইল পড়তে সমস্যা হয়েছে');
} else {
event.reply('file-data', data);
}
});
});
// Renderer Process (index.html)
const { ipcRenderer } = require('electron');
// Renderer Process থেকে ফাইল পড়ার অনুরোধ
ipcRenderer.send('read-file', 'path/to/safe-file.txt');
// Main Process থেকে সাড়া গ্রহণ
ipcRenderer.on('file-data', (event, data) => {
console.log(data);
});
এভাবে Renderer Process থেকে Main Process এ মেসেজ পাঠিয়ে ফাইল সিস্টেমে অ্যাক্সেস করা যায়, যা নিরাপদ।
৩. তিনটি স্তরের নিরাপত্তা কনফিগারেশন
Electron অ্যাপ্লিকেশনে নিরাপত্তার জন্য তিনটি স্তরের কনফিগারেশন গুরুত্বপূর্ন:
nodeIntegration: false: Renderer Process এ Node.js API নিষ্ক্রিয় করা।contextIsolation: true: Renderer এবং Main Process এর মধ্যে কনটেক্সট পৃথক করা।sandbox: true: অ্যাপের স্যান্ডবক্স মোড চালু করা (যা ব্যবহৃত প্লাগইন বা কোডকে সিস্টেমের বাইরের অ্যাক্সেস সীমিত করে)।
উদাহরণ:
let mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: false, // Renderer Process-এ Node.js নিষ্ক্রিয় করা
contextIsolation: true, // নিরাপত্তার জন্য context isolation সক্রিয় করা
sandbox: true // অ্যাপ স্যান্ডবক্স মোডে চালানো
}
});
এই কনফিগারেশনগুলো অ্যাপের নিরাপত্তা বাড়ানোর জন্য অত্যন্ত গুরুত্বপূর্ণ, কারণ সেগুলি Renderer Process-এ কোড ইঞ্জেকশন এবং ফাইল সিস্টেম অ্যাক্সেসকে সীমিত করে।
৪. ফাইল সিস্টেম অ্যাক্সেস সীমিত করা
প্রত্যেকটি অ্যাপ্লিকেশনের জন্য ফাইল সিস্টেম অ্যাক্সেস অত্যন্ত সীমিত হওয়া উচিত। শুধুমাত্র সুনির্দিষ্ট ফোল্ডার বা ফাইল থেকে অ্যাক্সেস পাওয়া উচিত এবং অন্য কোনো ডিরেক্টরি বা ফাইলের ওপর অ্যাক্সেস রাখা উচিত নয়।
নিরাপদ পদ্ধতি:
- শুধুমাত্র নির্দিষ্ট ফোল্ডার বা ফাইলের সাথে কাজ করুন। উদাহরণস্বরূপ, আপনি যদি একটি ডেটাবেস ফাইল পরিচালনা করতে চান তবে তার অবস্থান নির্ধারণ করুন এবং অন্যান্য ফাইল থেকে অ্যাক্সেস সীমিত করুন।
উদাহরণ:
ipcMain.on('safe-read-file', (event) => {
const safePath = 'path/to/safe/folder/file.txt';
fs.readFile(safePath, 'utf8', (err, data) => {
if (err) {
event.reply('file-error', 'ফাইল পড়তে সমস্যা হয়েছে');
} else {
event.reply('file-data', data);
}
});
});
এইভাবে আপনি অ্যাপ্লিকেশনটির ফাইল সিস্টেমে অ্যাক্সেস নিরাপদ করতে পারেন।
৫. File Path Validation
File Path যাচাই করা গুরুত্বপূর্ণ। কোন ফাইলের পাথ অ্যাক্সেস করা হচ্ছে তা যাচাই করা উচিত। আপনি এটি path.normalize() এবং path.isAbsolute() ফাংশন ব্যবহার করে নিশ্চিত করতে পারেন।
উদাহরণ:
const path = require('path');
ipcMain.on('safe-file-path', (event, filePath) => {
const normalizedPath = path.normalize(filePath);
if (path.isAbsolute(normalizedPath)) {
fs.readFile(normalizedPath, 'utf8', (err, data) => {
if (err) {
event.reply('file-error', 'ফাইল পড়তে সমস্যা হয়েছে');
} else {
event.reply('file-data', data);
}
});
} else {
event.reply('file-error', 'অনুমোদিত পাথ নয়');
}
});
এভাবে আপনি ফাইলের পাথ যাচাই করে নিরাপত্তা নিশ্চিত করতে পারেন।
সারাংশ
nodeIntegration: falseএবংcontextIsolation: trueব্যবহার করে Renderer Process-এ Node.js অ্যাক্সেস সীমিত করতে হবে।- IPC ব্যবহার করে Main Process থেকে ফাইল সিস্টেম অ্যাক্সেসের কাজ করা উচিত, যাতে নিরাপত্তা বজায় থাকে।
- শুধুমাত্র নির্দিষ্ট ফোল্ডার এবং ফাইল থেকে অ্যাক্সেস নিশ্চিত করতে হবে এবং ফাইল পাথ যাচাই করার প্রক্রিয়া ব্যবহার করা উচিত।
- স্যান্ডবক্স মোড এবং নিরাপত্তা কনফিগারেশনগুলো নিশ্চিত করুন, যাতে অ্যাপ্লিকেশনের সুরক্ষা বৃদ্ধি পায়।
Read more