File Validation এবং Security Considerations

GraphQL এর মধ্যে File Upload - গ্রাফকিউএল (GraphQL) - Web Development

200

গ্রাফকিউএল (GraphQL) ফাইল আপলোড এবং ভ্যালিডেশন, বিশেষ করে নিরাপত্তা এবং ডেটা সুরক্ষা বিষয়গুলোকে সঠিকভাবে পরিচালনা করা গুরুত্বপূর্ণ। ফাইল আপলোড করা একটি সাধারণ কার্যকলাপ হলেও, এর সাথে সঠিক ভ্যালিডেশন এবং নিরাপত্তা ব্যবস্থা নিশ্চিত না করলে আপনার অ্যাপ্লিকেশন বিপদে পড়তে পারে। এখানে ফাইল আপলোডের জন্য গ্রাফকিউএল ব্যবহারে কিছু গুরুত্বপূর্ণ File Validation এবং Security Considerations তুলে ধরা হলো।


File Validation in GraphQL

ফাইল আপলোডের ক্ষেত্রে, GraphQL নিজে কোন বিল্ট-ইন ফাইল আপলোড ফিচার সরবরাহ না করলেও, আপনি একটি কাস্টম স্কিমা ব্যবহার করে ফাইল আপলোড সক্ষম করতে পারেন। ফাইল আপলোড করার জন্য Apollo Server এবং GraphQL Upload প্যাকেজ ব্যবহৃত হয়।

File Upload কিভাবে কাজ করে:

  1. ক্লায়েন্ট থেকে ফাইলটি একটি multipart/form-data রিকোয়েস্টের মাধ্যমে সার্ভারে পাঠানো হয়।
  2. গ্রাফকিউএল স্কিমার মাধ্যমে ফাইলটি Upload টাইপে রিসিভ করা হয়।
  3. ফাইলের জন্য সঠিক validation এবং storage ব্যবস্থা নিশ্চিত করা হয়।

File Upload এবং Validation এর প্রক্রিয়া

  1. GraphQL Upload প্যাকেজ ইন্সটল করা: গ্রাফকিউএল এ ফাইল আপলোডের জন্য graphql-upload প্যাকেজ ইন্সটল করতে হবে।
npm install graphql-upload
  1. GraphQL Schema এর মাধ্যমে ফাইল আপলোড:
scalar Upload

type Mutation {
  singleUpload(file: Upload!): File
}

type File {
  filename: String
  mimetype: String
  encoding: String
}

এখানে:

  • Upload হল একটি বিশেষ scalar টাইপ যা ফাইল আপলোডের জন্য ব্যবহৃত হয়।
  • singleUpload হল একটি মিউটেশন, যেখানে ফাইল আপলোড করা যাবে।
  1. Resolvers ব্যবহার করে ফাইল আপলোড করা:
const { GraphQLUpload } = require('graphql-upload');

const resolvers = {
  Upload: GraphQLUpload,
  Mutation: {
    singleUpload: async (parent, { file }) => {
      const { createReadStream, filename, mimetype, encoding } = await file;
      // ফাইল স্টোরেজ বা ডেটাবেসে সেভ করার লজিক এখানে থাকবে
      return { filename, mimetype, encoding };
    },
  },
};

এখানে:

  • createReadStream ব্যবহার করে ফাইলের ডেটা পড়া হয় এবং filename, mimetype, encoding এর মতো মেটাডেটা পাওয়া যায়।
  • ফাইলটি সঠিকভাবে ডাটাবেস বা ফাইল সিস্টেমে সংরক্ষণ করা যেতে পারে।

File Validation

ফাইলের নিরাপত্তা এবং সঠিকতা যাচাই করার জন্য কিছু ভ্যালিডেশন পদ্ধতি রয়েছে:

  1. File Size Validation: ফাইলের আকার খুব বড় হতে পারে, যা সার্ভারের স্টোরেজ বা নেটওয়ার্ক ট্রাফিকের ওপর চাপ ফেলতে পারে। তাই, ফাইলের আকার সীমাবদ্ধ করা উচিত।
if (file.size > MAX_FILE_SIZE) {
  throw new Error('File size is too large');
}
  1. File Type Validation: ফাইলের টাইপ (mimetype) যাচাই করা গুরুত্বপূর্ণ, কারণ কিছু ফাইল এক্সটেনশন নিরাপদ নাও হতে পারে।
const allowedMimeTypes = ['image/jpeg', 'image/png', 'application/pdf'];

if (!allowedMimeTypes.includes(file.mimetype)) {
  throw new Error('Invalid file type');
}
  1. File Content Validation: ফাইলের কনটেন্ট নিরাপদ হওয়া প্রয়োজন। উদাহরণস্বরূপ, একটি image file যদি ম্যালওয়্যার ধারণ করে, তা হতে পারে বিপদজনক। এমন ধরনের ফাইলের জন্য অতিরিক্ত virus scanning ব্যবহার করা যেতে পারে।

Security Considerations

ফাইল আপলোডের নিরাপত্তা নিয়ে কাজ করার সময় কিছু প্রধান সুরক্ষা ব্যবস্থা গ্রহণ করা গুরুত্বপূর্ণ:

1. Path Traversal Attacks (Path manipulation)

ফাইল আপলোডের সময়, Path Traversal আক্রমণ রোধ করা অত্যন্ত গুরুত্বপূর্ণ। এটি তখন ঘটে যখন একজন অ্যাটাককারী ফাইলের নামের মধ্যে বিশেষ ক্যারেক্টার বা পাথ ট্রাভার্সাল কৌশল ব্যবহার করে সিস্টেমের নিরাপদ ডিরেক্টরি অ্যাক্সেস করার চেষ্টা করে। সুতরাং, ফাইলের পাথ সঠিকভাবে স্যানিটাইজ করা উচিত।

const path = require('path');
const filePath = path.join(__dirname, 'uploads', filename);

এখানে path.join() ব্যবহারের মাধ্যমে সঠিক ফাইল পাথ তৈরি করা হয়েছে, যা Path Traversal আক্রমণ প্রতিরোধে সাহায্য করে।

2. Limiting File Upload Types

কিছু ফাইল টাইপ (যেমন .exe, .bat, .js) নিরাপদ নয় এবং আপনার সিস্টেমে রান করার সম্ভাবনা থাকতে পারে। তাই আপলোডযোগ্য ফাইল টাইপ সীমিত করা উচিত।

const allowedMimeTypes = ['image/jpeg', 'image/png', 'application/pdf'];

এছাড়াও, আপনি file extension যাচাই করতে পারেন, যেমন .jpg, .png, .pdf

3. Limiting File Upload Size

ফাইল আপলোডের আকার সীমিত করা উচিত। বড় ফাইল সার্ভার এবং নেটওয়ার্কের উপর অতিরিক্ত চাপ সৃষ্টি করতে পারে, এবং এটি সিস্টেমের পারফরম্যান্স কমিয়ে দিতে পারে।

const MAX_FILE_SIZE = 5 * 1024 * 1024; // 5 MB

if (file.size > MAX_FILE_SIZE) {
  throw new Error('File size is too large');
}

4. Virus Scanning

আপনার সার্ভারে আপলোড হওয়া ফাইলগুলোকে virus scanning এর মাধ্যমে পরীক্ষা করা উচিত। এতে, ম্যালওয়্যার বা ক্ষতিকারক কোড ফাইলগুলোর মধ্যে উপস্থিত থাকলে তা সনাক্ত করা যাবে। আপনি ClamAV বা VirusTotal API ব্যবহার করতে পারেন।

5. Using Secure Storage for Files

আপনার সার্ভারে আপলোড করা ফাইলগুলো সঠিকভাবে সুরক্ষিত হওয়া উচিত। ফাইলগুলোর জন্য Secure Storage ব্যবস্থা নিতে হবে, এবং অনুমতি সঠিকভাবে সেট করতে হবে, যেন কোনো আক্রমণকারী ফাইলগুলোর অ্যাক্সেস করতে না পারে।

আপনার ফাইলগুলো ক্লাউড স্টোরেজ যেমন AWS S3 বা Google Cloud Storage তে সংরক্ষণ করা যেতে পারে, যেখানে ফাইল স্টোরেজের নিরাপত্তা ব্যবস্থাপনা সঠিকভাবে পরিচালিত হয়।


6. Restricting Access to Uploaded Files

ফাইল আপলোড করার পর, সেই ফাইলের অ্যাক্সেসের উপর নিয়ন্ত্রণ রাখতে হবে। কিছু ফাইল শুধুমাত্র অনুমোদিত ব্যবহারকারীদের জন্যই দৃশ্যমান হওয়া উচিত, যেমন প্রাইভেট ডকুমেন্টস বা ব্যাঙ্ক স্টেটমেন্টস।

AWS S3 ব্যবহার করার ক্ষেত্রে, signed URLs ব্যবহার করা যেতে পারে, যা নির্দিষ্ট সময়ের জন্য ফাইলের অ্যাক্সেস দেয়।


সারাংশ

GraphQL file upload এবং file validation হল এমন একটি প্রক্রিয়া, যেখানে আপনার ডেটা এবং সিস্টেমের নিরাপত্তা নিশ্চিত করতে কিছু সতর্কতা অবলম্বন করা প্রয়োজন। File size validation, file type validation, এবং virus scanning এর মাধ্যমে আপনি নিরাপদ ফাইল আপলোড সিস্টেম তৈরি করতে পারেন। এছাড়া, Path Traversal আক্রমণ, Limiting file types and sizes, এবং using secure storage এর মতো নিরাপত্তা পদ্ধতি আপনার সিস্টেমকে সুরক্ষিত রাখবে।

Content added By
Promotion

Are you sure to start over?

Loading...