Java Technologies Spring Security এবং Security Headers গাইড ও নোট

275

Security Headers হল HTTP হেডার যা ব্রাউজার এবং সার্ভার মধ্যে নিরাপদ যোগাযোগ নিশ্চিত করতে সাহায্য করে। এগুলি অতিরিক্ত নিরাপত্তা স্তর হিসেবে কাজ করে, যা অ্যাপ্লিকেশনকে বিভিন্ন ধরনের আক্রমণ যেমন XSS (Cross-site scripting), CSRF (Cross-site request forgery), Clickjacking, Man-in-the-middle attacks থেকে রক্ষা করতে পারে।

Spring Security এর মাধ্যমে সহজেই Security Headers কনফিগার করা যায়। এই হেডারগুলি বিভিন্ন আক্রমণের বিরুদ্ধে সুরক্ষা দেয় এবং অ্যাপ্লিকেশনের নিরাপত্তা নিশ্চিত করে।


Spring Security তে Security Headers কনফিগারেশন

Spring Security দ্বারা নিরাপত্তা হেডার কনফিগার করার জন্য HttpSecurity ব্যবহার করা হয়। আমরা বিভিন্ন ধরনের নিরাপত্তা হেডার যোগ করতে পারি, যেমন Strict-Transport-Security, X-Content-Type-Options, X-Frame-Options, Content-Security-Policy, X-XSS-Protection, ইত্যাদি।

নিচে বিস্তারিতভাবে Spring Security তে Security Headers কনফিগার করার একটি উদাহরণ দেওয়া হলো।


১. HTTP Security Headers কনফিগারেশন উদাহরণ

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .anyRequest().authenticated() // সমস্ত রিকোয়েস্ট অথেন্টিকেশন প্রয়োজন
            .and()
            .formLogin()  // ফর্ম লগইন সক্রিয়
            .and()
            .httpHeaders()
                .defaultsDisabled()  // ডিফল্ট HTTP হেডার নিষ্ক্রিয় করা
                .addHeaderWriter(new XContentTypeOptionsHeaderWriter()) // X-Content-Type-Options
                .addHeaderWriter(new StrictTransportSecurityHeaderWriter())  // Strict-Transport-Security
                .addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.Mode.SAMEORIGIN))  // X-Frame-Options
                .addHeaderWriter(new XSSProtectionHeaderWriter())  // X-XSS-Protection
                .addHeaderWriter(new ContentSecurityPolicyHeaderWriter("default-src 'self'"))  // Content-Security-Policy
                .and()
            .csrf().disable(); // CSRF সুরক্ষা নিষ্ক্রিয় (API অ্যাপ্লিকেশনের জন্য প্রয়োজন হতে পারে)
        return http.build();
    }
}

এখানে কিছু গুরুত্বপূর্ণ HTTP Security Headers কনফিগার করা হয়েছে:


২. বিভিন্ন Security Headers এবং তাদের কনফিগারেশন

1. Strict-Transport-Security (HSTS)

HSTS (HTTP Strict Transport Security) হল একটি নিরাপত্তা হেডার যা নিশ্চিত করে যে ব্রাউজারটি শুধুমাত্র HTTPS প্রোটোকলের মাধ্যমে সার্ভারে যোগাযোগ করবে।

.addHeaderWriter(new StrictTransportSecurityHeaderWriter())

এটি নিশ্চিত করে যে ব্রাউজার HTTP থেকে HTTPS এ রিডাইরেক্ট করবে এবং ভবিষ্যতে এই ডোমেইনে সমস্ত যোগাযোগ HTTPS তে হবে।


2. X-Content-Type-Options

এই হেডারটি ব্রাউজারকে নির্দেশ দেয় যে এটি কনটেন্ট টাইপ অনুমান করবে না। এটি MIME type sniffing আক্রমণ থেকে সুরক্ষা দেয়।

.addHeaderWriter(new XContentTypeOptionsHeaderWriter())

এটি MIME টাইপের সঠিক যাচাই করতে সাহায্য করে এবং কনটেন্ট টাইপ স্পেসিফিকেশন অনুযায়ীই ডেটা প্রসেস করতে ব্রাউজারকে বাধ্য করে।


3. X-Frame-Options

এই হেডারটি ব্রাউজারকে নির্দেশ দেয় যে, ওয়েব পেজটি অন্য কোন ডোমেইনে iframe এর মাধ্যমে লোড হবে না। এটি Clickjacking আক্রমণ থেকে রক্ষা করে।

.addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.Mode.SAMEORIGIN))

এটি SAMEORIGIN নির্দেশ করবে, যার মানে হলো, পেজটি শুধুমাত্র একই ডোমেইন থেকে iframe তে লোড করা যাবে।


4. X-XSS-Protection

এই হেডারটি ব্রাউজারের জন্য একটি ইন-বিল্ট এক্সএসএস সুরক্ষা প্রদান করে। এটি নিশ্চিত করে যে কোন Cross-site Scripting (XSS) আক্রমণ থেকে সুরক্ষা পাওয়া যাবে।

.addHeaderWriter(new XSSProtectionHeaderWriter())

এটি ব্রাউজারের XSS সুরক্ষা সক্রিয় করে এবং যদি কোন স্ক্রিপ্ট আক্রমণ হয়, তবে তা ব্লক করে।


5. Content-Security-Policy (CSP)

CSP হল একটি নিরাপত্তা হেডার যা ডেভেলপারকে স্ক্রিপ্ট এবং কনটেন্ট সরবরাহ করার উৎস নির্ধারণ করার অনুমতি দেয়। এটি Cross-site Scripting (XSS) আক্রমণ প্রতিরোধে কার্যকর।

.addHeaderWriter(new ContentSecurityPolicyHeaderWriter("default-src 'self'"))

এটি default-src 'self' ব্যবহার করে কনটেন্ট শুধু নিজের সাইট থেকেই লোড হতে পারে, এতে অন্য কোনো সাইট থেকে স্ক্রিপ্ট বা কনটেন্ট লোড করা হবে না।


6. Referrer-Policy

এই হেডারটি রেফারার ইনফরমেশন কিভাবে শেয়ার হবে তা নিয়ন্ত্রণ করে। এটি আক্রমণকারী সাইট থেকে রেফারেন্স গোপন রাখতে সহায়ক।

.addHeaderWriter(new ReferrerPolicyHeaderWriter(ReferrerPolicyHeaderWriter.ReferrerPolicy.NO_REFERRER))

এটি NO_REFERRER নির্ধারণ করলে, রেফারার তথ্য কখনও পাঠানো হবে না।


৩. Spring Security তে Security Headers এর প্রয়োজনীয়তা

  1. Cross-Site Scripting (XSS) প্রতিরোধ: X-XSS-Protection এবং Content-Security-Policy হেডার ব্যবহার করে XSS আক্রমণ প্রতিরোধ করা সম্ভব।
  2. Clickjacking আক্রমণ থেকে সুরক্ষা: X-Frame-Options হেডার ব্যবহারের মাধ্যমে ক্লিকজ্যাকিং আক্রমণ প্রতিরোধ করা হয়।
  3. Man-in-the-middle (MITM) আক্রমণ থেকে সুরক্ষা: Strict-Transport-Security (HSTS) হেডার HTTP থেকে HTTPS এ রিডাইরেক্ট নিশ্চিত করে, যা MITM আক্রমণ থেকে সুরক্ষা দেয়।
  4. MIME Type Sniffing প্রতিরোধ: X-Content-Type-Options হেডার কনটেন্টের MIME টাইপ সঠিকভাবে যাচাই করার জন্য ব্রাউজারকে বাধ্য করে।
  5. সঠিক রেফারেন্স তথ্য পরিচালনা: Referrer-Policy হেডার ব্যবহারের মাধ্যমে রেফারেন্স ডেটা নিরাপদভাবে শেয়ার করা যায়।

উপসংহার

Spring Security তে Security Headers কনফিগার করার মাধ্যমে আপনার ওয়েব অ্যাপ্লিকেশনকে নানা ধরনের আক্রমণ থেকে রক্ষা করা সম্ভব। এগুলি ব্রাউজারের নিরাপত্তা উন্নত করে এবং সার্ভারের সাথে নিরাপদ যোগাযোগ নিশ্চিত করে। বিভিন্ন নিরাপত্তা হেডার যেমন Strict-Transport-Security, X-Content-Type-Options, X-Frame-Options, X-XSS-Protection, এবং Content-Security-Policy এর মাধ্যমে আপনার অ্যাপ্লিকেশনকে আরো নিরাপদ করা যায়।

Content added By

Security Headers কি এবং কেন এটি গুরুত্বপূর্ণ?

309

Security Headers হল HTTP হেডারগুলির একটি সেট যা একটি ওয়েব অ্যাপ্লিকেশনের নিরাপত্তা বাড়ানোর জন্য ব্যবহৃত হয়। এই হেডারগুলি ব্রাউজার এবং সার্ভারের মধ্যে তথ্যের আদান-প্রদান নিরাপদ করার জন্য বিভিন্ন নিরাপত্তা ব্যবস্থা সক্রিয় করে। এগুলি মূলত নিরাপত্তার আক্রমণ যেমন Cross-Site Scripting (XSS), Clickjacking, Cross-Site Request Forgery (CSRF), এবং MIME sniffing প্রতিরোধ করতে সাহায্য করে।

Spring Security সহজেই বিভিন্ন নিরাপত্তা হেডার কনফিগার করার সুযোগ প্রদান করে যা ওয়েব অ্যাপ্লিকেশনের সুরক্ষা বাড়াতে সহায়তা করে।


Security Headers কি?

Security Headers হল HTTP হেডারগুলির একটি সেট যা ওয়েব অ্যাপ্লিকেশনের নিরাপত্তা উন্নত করতে ব্যবহৃত হয়। নিচে কিছু গুরুত্বপূর্ণ Security Headers এর তালিকা এবং তাদের কার্যাবলী দেওয়া হলো:

  1. Strict-Transport-Security (HSTS):
    • এই হেডারটি ব্রাউজারকে HTTPS (Secure HTTP) ব্যবহারের জন্য নির্দেশ দেয়।
    • এটি MITM (Man-In-The-Middle) আক্রমণ এবং SSL Stripping প্রতিরোধে সাহায্য করে।
    • উদাহরণ:

      Strict-Transport-Security: max-age=31536000; includeSubDomains
      
  2. Content-Security-Policy (CSP):
    • CSP হেডারটি XSS আক্রমণ প্রতিরোধে ব্যবহৃত হয়।
    • এটি সাইটে কোন স্ক্রিপ্ট বা অন্যান্য রিসোর্স লোড করা যাবে তা নির্ধারণ করে।
    • উদাহরণ:

      Content-Security-Policy: default-src 'self'; script-src 'self' https://apis.example.com
      
  3. X-Content-Type-Options:
    • এটি ব্রাউজারকে MIME sniffing থেকে রক্ষা করে, যেখানে ব্রাউজার ডেটার ধরন সঠিকভাবে শনাক্ত করতে পারে না।
    • উদাহরণ:

      X-Content-Type-Options: nosniff
      
  4. X-Frame-Options:
    • এই হেডারটি Clickjacking আক্রমণ প্রতিরোধ করে, যেখানে আক্রমণকারী অন্য একটি ওয়েবসাইটের মধ্যে আপনার সাইটকে iframe হিসেবে প্রতিস্থাপন করতে পারে।
    • উদাহরণ:

      X-Frame-Options: DENY
      
  5. X-XSS-Protection:
    • এই হেডারটি Cross-Site Scripting (XSS) আক্রমণ প্রতিরোধে সাহায্য করে।
    • উদাহরণ:

      X-XSS-Protection: 1; mode=block
      
  6. Referrer-Policy:
    • এটি নির্ধারণ করে যে ওয়েব ব্রাউজার কোন তথ্য রেফারার হিসেবে পাঠাবে যখন ব্যবহারকারী একটি লিংকে ক্লিক করবে।
    • উদাহরণ:

      Referrer-Policy: no-referrer-when-downgrade
      
  7. Permissions-Policy:
    • এটি ব্রাউজারের বিভিন্ন বৈশিষ্ট্য ব্যবহারের উপর সীমাবদ্ধতা আরোপ করে, যেমন ক্যামেরা, মাইক্রোফোন ইত্যাদি।
    • উদাহরণ:

      Permissions-Policy: geolocation=(self), microphone=()
      
  8. Cache-Control:
    • এই হেডারটি ব্রাউজার বা অন্য যেকোনো ক্যাশিং সিস্টেমকে কীভাবে কনটেন্ট ক্যাশ করতে হবে তা নির্দেশ করে।
    • উদাহরণ:

      Cache-Control: no-store
      

Security Headers কেন গুরুত্বপূর্ণ?

  1. Cross-Site Scripting (XSS) আক্রমণ থেকে সুরক্ষা:
    • Content-Security-Policy (CSP) হেডারটি XSS আক্রমণ প্রতিরোধে সাহায্য করে। এটি নিশ্চিত করে যে স্ক্রিপ্টগুলো শুধুমাত্র নির্দিষ্ট উৎস থেকে লোড হবে, যার মাধ্যমে ক্ষতিকারক স্ক্রিপ্টিং এড়ানো যায়।
  2. Clickjacking আক্রমণ থেকে সুরক্ষা:
    • X-Frame-Options হেডারটি Clickjacking আক্রমণ প্রতিরোধ করে। এটি ওয়েবসাইটের ইউজার ইন্টারফেসকে অন্য কোনো সাইটে iframe হিসেবে প্রদর্শিত হতে বাধা দেয়।
  3. SSL/TLS নিরাপত্তা নিশ্চিতকরণ:
    • Strict-Transport-Security (HSTS) হেডারটি HTTPS ব্যবহারে ব্রাউজারকে বাধ্য করে এবং SSL Stripping আক্রমণ রোধ করে।
  4. MIME Sniffing প্রতিরোধ:
    • X-Content-Type-Options হেডারটি MIME Sniffing থেকে রক্ষা করে, যাতে ব্রাউজার কোনো ধরনের সাইটের কন্টেন্ট ভুলভাবে শনাক্ত করতে না পারে।
  5. Sensitive Data Leak প্রতিরোধ:
    • Cache-Control হেডারটি গুরুত্বপূর্ণ তথ্য ক্যাশ হতে বাধা দেয়। এটি সংবেদনশীল তথ্য যেমন লগইন তথ্য বা ক্রেডেনশিয়াল ক্যাশ হতে রক্ষা করে।
  6. Privacy Enhancement:
    • Referrer-Policy এবং Permissions-Policy হেডারগুলো ব্যবহারকারীর গোপনীয়তা নিশ্চিত করতে সহায়তা করে। Referrer-Policy প্রাইভেসি সুরক্ষায় সাহায্য করে যখন ব্যবহারকারী একটি লিংকে ক্লিক করে এবং Permissions-Policy ব্রাউজারের কিছু বৈশিষ্ট্য ব্যবহার সীমাবদ্ধ করে।

Spring Security তে Security Headers কনফিগার করা

Spring Security তে Security Headers কনফিগার করা খুবই সহজ। আপনি HttpSecurity এর মাধ্যমে এই হেডারগুলো কনফিগার করতে পারেন।

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests()
                .anyRequest().authenticated() // Require authentication for all requests
            .and()
            .headers()
                .contentSecurityPolicy("default-src 'self'; script-src 'self' https://apis.example.com") // CSP for XSS prevention
                .and()
                .xssProtection()
                    .block(true) // Enable XSS protection
                .and()
                .frameOptions()
                    .deny() // Disable framing to prevent Clickjacking
                .and()
                .httpStrictTransportSecurity()
                    .maxAgeInSeconds(31536000) // Enable HSTS for one year
                    .includeSubDomains(true)
                .and()
                .cacheControl()
                    .noStore(); // Disable caching of sensitive data
        return http.build();
    }
}

উপসংহার

Security Headers অত্যন্ত গুরুত্বপূর্ণ একটি উপাদান যা ওয়েব অ্যাপ্লিকেশনের নিরাপত্তা বাড়ানোর জন্য ব্যবহৃত হয়। Spring Security ব্যবহার করে আপনি সহজেই বিভিন্ন নিরাপত্তা হেডার কনফিগার করে আপনার অ্যাপ্লিকেশনকে XSS, Clickjacking, SSL Stripping, MIME Sniffing, এবং অন্যান্য নিরাপত্তা আক্রমণ থেকে সুরক্ষিত রাখতে পারেন।

আপনার অ্যাপ্লিকেশনে নিরাপত্তা বাড়ানোর জন্য এই হেডারগুলির ব্যবহার নিশ্চিত করতে পারেন।

Content added By

Spring Security তে XSS এবং Clickjacking Protection কনফিগার করা

283

XSS (Cross-Site Scripting) এবং Clickjacking হল দুটি সাধারণ ওয়েব নিরাপত্তা সমস্যা যা আপনার অ্যাপ্লিকেশনকে ঝুঁকিতে ফেলতে পারে। Spring Security তে এই সমস্যাগুলোর সুরক্ষা নিশ্চিত করার জন্য সহজ এবং কার্যকর কনফিগারেশন প্রদান করা হয়। এখানে আমরা দেখব কীভাবে Spring Security তে XSS এবং Clickjacking-এর বিরুদ্ধে সুরক্ষা কনফিগার করা যায়।


1. XSS (Cross-Site Scripting) Protection

XSS আক্রমণ ঘটতে পারে যখন একজন আক্রমণকারী ক্ষতিকারক স্ক্রিপ্ট কোড সরাসরি ব্যবহারকারীর ব্রাউজারে ইনজেক্ট করে। এটি সাধারণত ফর্ম ইনপুট, URL প্যারামিটার বা কুকির মাধ্যমে ঘটে। XSS রোধের জন্য, Spring Security অটোমেটিকভাবে স্ক্রিপ্ট ইনজেকশন প্রতিরোধ করে, কিন্তু কিছু ক্ষেত্রে আপনি এটি কাস্টমাইজ করতে পারেন।

Spring Security তে XSS Protection কনফিগারেশন

Spring Security তে XSS রোধ করার জন্য, আপনি HttpSecurity কনফিগারেশন ব্যবহার করতে পারেন। সাধারণত, Spring Security XSS-এর বিরুদ্ধে Content Security Policy (CSP), HTTP Headers, এবং Sanitization ব্যবহার করে সুরক্ষা প্রদান করে।

Step 1: Content Security Policy (CSP) ব্যবহার করা

CSP হল একটি নিরাপত্তা বৈশিষ্ট্য যা XSS আক্রমণ প্রতিরোধে সাহায্য করে। CSP দ্বারা আপনি ব্রাউজারকে নির্দেশ দিতে পারেন কোন সোর্স থেকে কনটেন্ট লোড করা যাবে।

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .anyRequest().authenticated()
            .and()
            .headers()
                .contentSecurityPolicy("default-src 'self'") // CSP সেট করা হচ্ছে
            .and()
            .formLogin()
                .permitAll();
        
        return http.build();
    }
}
Explanation:
  • contentSecurityPolicy("default-src 'self'"): এই CSP পলিসি শুধুমাত্র ঐ সাইটের নিজের সোর্স থেকে কনটেন্ট লোড করার অনুমতি দেয়। এতে করে বহিরাগত সোর্স থেকে স্ক্রিপ্ট বা অন্য কোন কনটেন্ট ইনজেকশন প্রতিরোধ করা হয়।

Step 2: XSS Filter

Spring Security XSS filter স্বয়ংক্রিয়ভাবে ইনপুট ভ্যালিডেশন এবং ইনপুটকে স্যানিটাইজ করে। আপনি একটি কাস্টম XSSFilter তৈরি করতে পারেন যদি আপনি আরও কাস্টম লজিক চান।

import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class XSSFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, javax.servlet.http.HttpServletResponse response, FilterChain chain)
            throws ServletException, IOException {

        // কাস্টম ইনপুট স্যানিটাইজেশন লজিক
        // উদাহরণ: request এর প্যারামিটারগুলো স্যানিটাইজ করা হতে পারে
        String sanitizedRequest = request.getParameter("userInput");
        request.setAttribute("sanitizedInput", sanitizedRequest); // স্যানিটাইজড ইনপুট ব্যবহার করা হচ্ছে

        chain.doFilter(request, response);  // পরবর্তী ফিল্টারে রিকোয়েস্ট পাঠানো
    }
}
Explanation:
  • XSSFilter কাস্টম ইনপুট স্যানিটাইজেশন প্রক্রিয়া তৈরি করে যাতে যে কোন ইউজার ইনপুট থেকে স্ক্রিপ্ট কোড সরিয়ে ফেলা হয়।

2. Clickjacking Protection

Clickjacking হল একটি আক্রমণ যেখানে আক্রমণকারী একটি ফ্রেমে একটি পেজ লোড করে এবং ব্যবহারকারী যখন পেজে ক্লিক করে, তখন আসলে সেই ক্লিক অন্য একটি হিডেন রিসোর্সের উপর চলে যায়। এটি আপনার অ্যাপ্লিকেশন বা ওয়েবসাইটের নিরাপত্তার জন্য মারাত্মক হতে পারে।

Spring Security-তে Clickjacking প্রতিরোধের জন্য X-Frame-Options হেডার ব্যবহার করা হয়, যা একটি পেজকে অন্য কোন পেজে ইনক্লুড বা ফ্রেমে লোড হতে বাধা দেয়।

Step 1: X-Frame-Options Header ব্যবহার করা

X-Frame-Options হেডারটি ব্যবহার করে Clickjacking থেকে সুরক্ষা পেতে পারেন।

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .anyRequest().authenticated()
            .and()
            .headers()
                .frameOptions().sameOrigin()  // Clickjacking protection
            .and()
            .formLogin()
                .permitAll();

        return http.build();
    }
}
Explanation:
  • frameOptions().sameOrigin(): এই কনফিগারেশন সেটিং কেবলমাত্র সাইটটির নিজের সোর্স থেকে ফ্রেমে পেজ লোড করতে দেয়, অর্থাৎ অন্য কোন সাইটে আপনার অ্যাপ্লিকেশন ফ্রেমে লোড করা যাবে না। এটি Clickjacking আক্রমণ প্রতিরোধ করে।

Step 2: X-Frame-Options হেডার কাস্টমাইজ করা

আপনি DENY বা SAMEORIGIN এর পরিবর্তে কাস্টম হেডার মূল্যও ব্যবহার করতে পারেন।

  • DENY: এই অপশনটি আপনার পেজকে সম্পূর্ণভাবে অন্য কোনো ফ্রেমে লোড হতে বাধা দেয়।
  • SAMEORIGIN: এই অপশনটি শুধুমাত্র একই ডোমেইন থেকে ফ্রেমে পেজ লোড করার অনুমতি দেয়।
http
    .headers()
    .frameOptions().deny()  // পুরোপুরি Clickjacking প্রতিরোধ

উপসংহার

Spring Security-তে XSS এবং Clickjacking Protection কনফিগার করার জন্য কিছু সাধারণ এবং কার্যকরী পদ্ধতি রয়েছে:

  • XSS Protection: Content Security Policy (CSP) ব্যবহার করে স্ক্রিপ্ট ইনজেকশন থেকে রক্ষা করা যায়। আপনি কাস্টম XSS ফিল্টারও যোগ করতে পারেন যা ইনপুট স্যানিটাইজেশন প্রক্রিয়া করবে।
  • Clickjacking Protection: X-Frame-Options হেডার ব্যবহার করে অ্যাপ্লিকেশনকে Clickjacking আক্রমণ থেকে রক্ষা করা সম্ভব।

এগুলি আপনার অ্যাপ্লিকেশনের নিরাপত্তা বাড়ানোর জন্য অত্যন্ত গুরুত্বপূর্ণ এবং Spring Security এগুলোর জন্য শক্তিশালী সমাধান প্রদান করে।

Content added By

HSTS (HTTP Strict Transport Security) এবং Content Security Policy (CSP) কনফিগারেশন

304

HSTS (HTTP Strict Transport Security) এবং CSP (Content Security Policy) হল দুইটি গুরুত্বপূর্ণ নিরাপত্তা বৈশিষ্ট্য যা আপনার অ্যাপ্লিকেশনকে অনলাইন আক্রমণ যেমন man-in-the-middle attacks এবং cross-site scripting (XSS) থেকে রক্ষা করতে সহায়ক। স্প্রিং সিকিউরিটি দিয়ে সহজেই আপনি এই দুটি নিরাপত্তা পলিসি কনফিগার করতে পারেন।


1. HTTP Strict Transport Security (HSTS)

HSTS একটি HTTP হেডার যা ব্রাউজারকে নির্দেশ দেয় শুধুমাত্র HTTPS ব্যবহার করতে এবং HTTP ব্যবহার করতে নিরুৎসাহিত করে। এটি SSL Stripping আক্রমণ প্রতিরোধে সহায়ক।

HSTS কীভাবে কাজ করে?

  • ব্রাউজার যখন প্রথমবার HTTPS ব্যবহার করে আপনার সাইটে প্রবেশ করে, তখন সার্ভার একটি HSTS হেডার পাঠায় যা ব্রাউজারকে বলে যে, পরবর্তী কিছু সময়ের জন্য এই সাইটে কেবল HTTPS ব্যবহার করতে হবে।
  • এর মাধ্যমে, HTTP থেকে HTTPS-এ ডাউনগ্রেড হওয়া সম্ভব নয় এবং এটি Man-in-the-middle (MITM) আক্রমণ প্রতিরোধে সাহায্য করে।

Spring Security তে HSTS কনফিগারেশন

স্প্রিং সিকিউরিটিতে HSTS কনফিগার করতে HttpSecurity এর httpStrictTransportSecurity() মেথড ব্যবহার করা হয়।

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/home").permitAll()
                .anyRequest().authenticated()
            .and()
            .formLogin()
            .and()
            .logout()
                .permitAll()
            .and()
            .httpStrictTransportSecurity()
                .includeSubDomains(true) // Subdomains also require HTTPS
                .maxAgeInSeconds(31536000); // Cache HSTS header for 1 year
    }
}

HSTS Key Parameters:

  • includeSubDomains(true): এটি সাবডোমেইনগুলিতেও HTTPS প্রয়োগ করে।
  • maxAgeInSeconds(31536000): HSTS হেডারটি কতো সময় (in seconds) ব্রাউজারে থাকতে হবে (এখানে 1 বছর দেওয়া হয়েছে)।

2. Content Security Policy (CSP)

Content Security Policy (CSP) একটি নিরাপত্তা ফিচার যা আপনার ওয়েব পেজে অনুমোদিত কন্টেন্ট সোর্সের তালিকা নির্ধারণ করে। এটি Cross-Site Scripting (XSS) এবং data injection attacks এর বিরুদ্ধে সুরক্ষা প্রদান করে।

CSP কীভাবে কাজ করে?

CSP হেডারটি ওয়েব পেজের জন্য নির্ধারিত কন্টেন্ট সোর্স বা রিসোর্স লোডিং পলিসি নির্ধারণ করে। এটি স্পষ্টভাবে নির্ধারণ করে কোন উৎস (source) থেকে স্ক্রিপ্ট, স্টাইল, ছবি বা অন্যান্য রিসোর্স লোড করা যাবে এবং কোন উৎস থেকে লোড করা যাবে না।

Spring Security তে CSP কনফিগারেশন

স্প্রিং সিকিউরিটিতে CSP কনফিগার করার জন্য HttpSecurity তে একটি কাস্টম হেডার যোগ করা যায়।

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/home").permitAll()  // Public URLs
                .anyRequest().authenticated()          // Other URLs require authentication
            .and()
            .formLogin()  // Enable form login
            .and()
            .logout()  // Enable logout
            .and()
            .headers()
                .contentSecurityPolicy("default-src 'self'; " +
                                        "script-src 'self' 'unsafe-inline' 'unsafe-eval'; " +
                                        "style-src 'self' 'unsafe-inline'; " +
                                        "img-src 'self'; " +
                                        "font-src 'self'; " +
                                        "connect-src 'self'; " +
                                        "frame-ancestors 'none'; " +
                                        "base-uri 'self'; " +
                                        "form-action 'self';");  // CSP header
    }
}

CSP Policy Explanation:

  • default-src 'self': শুধুমাত্র বর্তমান ডোমেইন থেকে কন্টেন্ট লোড করার অনুমতি।
  • script-src 'self' 'unsafe-inline': স্ক্রিপ্ট শুধু বর্তমান ডোমেইন থেকে লোড হবে, এবং inline স্ক্রিপ্টও অনুমোদিত।
  • style-src 'self' 'unsafe-inline': স্টাইল শুধুমাত্র বর্তমান ডোমেইন থেকে লোড হবে, এবং inline স্টাইলও অনুমোদিত।
  • img-src 'self': শুধুমাত্র বর্তমান ডোমেইন থেকে ইমেজ লোড হবে।
  • font-src 'self': শুধুমাত্র বর্তমান ডোমেইন থেকে ফন্ট লোড হবে।
  • frame-ancestors 'none': কোনোভাবেই এই পেজটি iframe এ লোড হতে পারবে না।
  • base-uri 'self': base ট্যাগ ব্যবহার করার অনুমতি শুধুমাত্র বর্তমান ডোমেইন থেকে।
  • form-action 'self': শুধুমাত্র বর্তমান ডোমেইনে ফর্ম সাবমিট করা যাবে।

3. HSTS এবং CSP একসাথে কনফিগার করা

স্প্রিং সিকিউরিটিতে আপনি সহজেই HSTS এবং CSP একসাথে কনফিগার করতে পারেন। নিচে উল্লিখিত কোডে উভয় নিরাপত্তা বৈশিষ্ট্য একসাথে কনফিগার করা হয়েছে।

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/home").permitAll()  // Public URLs
                .anyRequest().authenticated()          // All other URLs need authentication
            .and()
            .formLogin()  // Enable form login
            .and()
            .logout()  // Enable logout
            .and()
            .headers()
                .httpStrictTransportSecurity()
                    .includeSubDomains(true)  // HSTS: Apply to subdomains
                    .maxAgeInSeconds(31536000)  // HSTS: Cache for 1 year
                .and()
                .contentSecurityPolicy("default-src 'self'; " +
                                        "script-src 'self' 'unsafe-inline' 'unsafe-eval'; " +
                                        "style-src 'self' 'unsafe-inline'; " +
                                        "img-src 'self'; " +
                                        "font-src 'self'; " +
                                        "connect-src 'self'; " +
                                        "frame-ancestors 'none'; " +
                                        "base-uri 'self'; " +
                                        "form-action 'self';");  // CSP: Define resource loading rules
    }
}

4. HSTS এবং CSP এর সুবিধা

  • HSTS (HTTP Strict Transport Security):
    • SSL Stripping আক্রমণ প্রতিরোধে সহায়ক।
    • ব্রাউজারকে HTTPS ব্যবহার করার জন্য বাধ্য করে, HTTP ব্যবহার অগ্রহণযোগ্য করে।
    • সাইটের নিরাপত্তা বৃদ্ধি করে।
  • CSP (Content Security Policy):
    • XSS (Cross-Site Scripting) এবং data injection আক্রমণ প্রতিরোধে সহায়ক।
    • নির্দিষ্ট সোর্স থেকে কন্টেন্ট লোড করার অনুমতি দেয়, অন্যথায় নিষিদ্ধ করে।

উপসংহার

HSTS এবং CSP হল অত্যন্ত গুরুত্বপূর্ণ নিরাপত্তা বৈশিষ্ট্য যা ওয়েব অ্যাপ্লিকেশনের নিরাপত্তা নিশ্চিত করতে সহায়ক। স্প্রিং সিকিউরিটিতে এই দুটি ফিচার কনফিগার করে আপনি আপনার অ্যাপ্লিকেশনকে man-in-the-middle attacks, XSS, এবং অন্যান্য সাইবার আক্রমণ থেকে সুরক্ষিত রাখতে পারবেন।

Content added By

উদাহরণ সহ Security Headers বাস্তবায়ন

273

Security Headers হল HTTP হেডার যা ওয়েব সার্ভিস বা অ্যাপ্লিকেশনের সুরক্ষা বাড়াতে ব্যবহৃত হয়। এগুলি ব্রাউজারকে বিভিন্ন নিরাপত্তা নীতি অনুসরণ করতে বলে, যেমন কোন রিসোর্স কোথা থেকে লোড করা যাবে, কীভাবে তথ্য সুরক্ষিত থাকবে, এবং কীভাবে ব্রাউজারটি ব্যবহারকারীকে নিরাপদ রাখবে।

Spring Security তে Security Headers কনফিগার করা সহজ এবং এটি সুরক্ষা বাড়ানোর জন্য একটি কার্যকরী পদ্ধতি।

বিভিন্ন Security Headers:

  1. X-Content-Type-Options: MIME ধরনের অটোটেস্টিং নিষ্ক্রিয় করে।
  2. Strict-Transport-Security (HSTS): ব্রাউজারকে HTTPS ব্যবহারের জন্য বাধ্য করে।
  3. X-Frame-Options: ওয়েব পেজকে iframe-এ লোড হতে নিষিদ্ধ করে।
  4. X-XSS-Protection: Cross-site Scripting (XSS) আক্রমণ প্রতিরোধে সাহায্য করে।
  5. Content-Security-Policy (CSP): স্ক্রিপ্ট বা অন্যান্য কন্টেন্ট উৎস নিয়ন্ত্রণ করে।

Spring Security তে Security Headers কনফিগারেশন

Spring Security তে Security Headers কনফিগার করার জন্য, আপনি HttpSecurity কনফিগারেশন ব্যবহার করতে পারেন। Spring Security ডিফল্টভাবে বেশ কিছু নিরাপত্তা হেডার সাপোর্ট করে, তবে আপনি আপনার প্রয়োজন অনুসারে সেগুলি কাস্টমাইজ করতে পারেন।

ধাপ ১: Spring Security কনফিগারেশন ক্লাস তৈরি করুন

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.header.HeaderWriterFilter;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .headers()
                .defaultsDisabled() // Disable default headers first
                .addHeaderWriter(new XContentTypeOptionsHeaderWriter()) // Add custom headers
                .addHeaderWriter(new XFrameOptionsHeaderWriter()) 
                .addHeaderWriter(new StrictTransportSecurityHeaderWriter())
                .addHeaderWriter(new XXssProtectionHeaderWriter())
                .addHeaderWriter(new ContentSecurityPolicyHeaderWriter())
            .and()
            .authorizeRequests()
                .anyRequest().authenticated(); // Protect all requests
        return http.build();
    }

    // Add custom headers
    public static class XContentTypeOptionsHeaderWriter implements org.springframework.security.web.header.HeaderWriter {
        @Override
        public void writeHeaders(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {
            response.setHeader("X-Content-Type-Options", "nosniff");
        }
    }

    public static class XFrameOptionsHeaderWriter implements org.springframework.security.web.header.HeaderWriter {
        @Override
        public void writeHeaders(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {
            response.setHeader("X-Frame-Options", "DENY");
        }
    }

    public static class StrictTransportSecurityHeaderWriter implements org.springframework.security.web.header.HeaderWriter {
        @Override
        public void writeHeaders(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {
            response.setHeader("Strict-Transport-Security", "max-age=31536000 ; includeSubDomains");
        }
    }

    public static class XXssProtectionHeaderWriter implements org.springframework.security.web.header.HeaderWriter {
        @Override
        public void writeHeaders(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {
            response.setHeader("X-XSS-Protection", "1; mode=block");
        }
    }

    public static class ContentSecurityPolicyHeaderWriter implements org.springframework.security.web.header.HeaderWriter {
        @Override
        public void writeHeaders(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {
            response.setHeader("Content-Security-Policy", "default-src 'self'; script-src 'self' https://apis.google.com;");
        }
    }
}

ব্যাখ্যা:

  1. defaultsDisabled(): Spring Security এর ডিফল্ট হেডারগুলিকে অক্ষম করতে ব্যবহৃত হয়, যাতে আপনি কাস্টম হেডারগুলি যুক্ত করতে পারেন।
  2. addHeaderWriter(): এটি একটি কাস্টম হেডার লেখক যুক্ত করে যা নির্দিষ্ট হেডারগুলির মান সেট করে।

ধাপ ২: Spring Security Header Configurations

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

1. Strict-Transport-Security (HSTS)

HSTS একটি HTTP হেডার যা নির্দেশ করে যে ব্রাউজারটি সবসময় HTTPS ব্যবহার করবে। এটি SSL/TLS সুরক্ষা সক্রিয় করতে সাহায্য করে।

response.setHeader("Strict-Transport-Security", "max-age=31536000 ; includeSubDomains");

এটি সার্ভারকে বলে যে পরবর্তী ১ বছর (৩১৫৩৬০০০ সেকেন্ড) সার্ভারের সাথে যোগাযোগ করতে সবসময় HTTPS ব্যবহার করতে হবে।

2. X-Content-Type-Options

এই হেডারটি ব্রাউজারকে বলে যে এটি কোনো ফাইলের MIME টাইপ পরিবর্তন করার চেষ্টা না করে, একে যেভাবে সেট করা আছে তেমনিভাবে তা পরিচালনা করবে।

response.setHeader("X-Content-Type-Options", "nosniff");

3. X-Frame-Options

এই হেডারটি নিশ্চিত করে যে আপনার পেজটি কোনো iframe বা frame এ লোড করা যাবে না, যাতে clickjacking আক্রমণ প্রতিরোধ হয়।

response.setHeader("X-Frame-Options", "DENY");
  • DENY: কোনোভাবেই iframe-এ পেজ লোড হবে না।
  • SAMEORIGIN: শুধুমাত্র একই ডোমেইন থেকে iframe-এ পেজ লোড হবে।

4. X-XSS-Protection

এই হেডারটি XSS (Cross-Site Scripting) আক্রমণ থেকে রক্ষা করতে ব্রাউজারের XSS সুরক্ষা চালু করে।

response.setHeader("X-XSS-Protection", "1; mode=block");

5. Content-Security-Policy (CSP)

CSP হেডারটি ব্রাউজারকে নির্দিষ্ট ডোমেইন থেকে স্ক্রিপ্ট বা অন্যান্য রিসোর্স লোড করার অনুমতি দেয়। এটি XSS আক্রমণ থেকে সুরক্ষা প্রদান করে।

response.setHeader("Content-Security-Policy", "default-src 'self'; script-src 'self' https://apis.google.com;");

এটি নিশ্চিত করে যে শুধু 'self' (অর্থাৎ, বর্তমান ডোমেইন) এবং নির্দিষ্ট ডোমেইন থেকে স্ক্রিপ্ট লোড করা যাবে।


ধাপ ৩: Test your Application

এখন আপনি Spring Security এর মাধ্যমে Security Headers কনফিগারেশন করেছেন। আপনার অ্যাপ্লিকেশন রান করার পরে, ব্রাউজারের Developer Tools এর Network ট্যাবের মাধ্যমে আপনার HTTP রেসপন্সে হেডারগুলির উপস্থিতি পরীক্ষা করতে পারেন।

  1. ব্রাউজারে আপনার অ্যাপ্লিকেশনটি খুলুন।
  2. Developer Tools খুলুন (F12 বা Ctrl+Shift+I) এবং Network ট্যাবে যান।
  3. রিকোয়েস্ট সিলেক্ট করুন এবং Headers সেকশনে Security Headers চেক করুন।

উপসংহার

Spring Security তে Security Headers কনফিগার করে আপনি আপনার ওয়েব অ্যাপ্লিকেশনের সুরক্ষা বাড়াতে পারেন। HSTS, XSS Protection, Content Security Policy এবং অন্যান্য সিকিউরিটি হেডারগুলি ব্যবহার করে আপনি অ্যাপ্লিকেশনটিকে আক্রমণের থেকে সুরক্ষিত করতে পারেন। Spring Security এই কনফিগারেশনকে খুব সহজভাবে ম্যানেজ করতে দেয়, যা আপনার সিস্টেমের নিরাপত্তা স্তর উন্নত করে।

Content added By
Promotion

Are you sure to start over?

Loading...