Dev to webs {Coding…}

เรียนรู้การพัฒนาซอฟเวอร์ เพื่อความรู้ที่ยั่งยืน

บทที่ 48: การเพิ่มความปลอดภัยในแอปพลิเคชัน Vue.js

1. ความสำคัญของความปลอดภัยในแอปพลิเคชัน

ความปลอดภัยเป็นสิ่งสำคัญในแอปพลิเคชัน Vue.js เพื่อปกป้องข้อมูลผู้ใช้และป้องกันการโจมตีจากผู้ไม่หวังดี เช่น Cross-Site Scripting (XSS), Cross-Site Request Forgery (CSRF), และการขโมยข้อมูล


2. การป้องกันการโจมตีแบบ Cross-Site Scripting (XSS)

2.1 หลีกเลี่ยงการใช้ v-html

การใช้ v-html เพื่อแสดง HTML ที่มาจากผู้ใช้อาจทำให้เกิด XSS

ตัวอย่างที่ควรหลีกเลี่ยง:

<p v-html="userInput"></p>

วิธีป้องกัน:

  • ใช้การกรองข้อมูล Input
  • ใช้ไลบรารีอย่าง DOMPurify

ตัวอย่างการใช้ DOMPurify:

import DOMPurify from 'dompurify';

export default {
  computed: {
    sanitizedInput() {
      return DOMPurify.sanitize(this.userInput);
    }
  }
};

2.2 ใช้ Template Binding

ใช้ Template Binding ({{}}) แทน v-html เพื่อป้องกันการฝัง Script

<p>{{ userInput }}</p>

3. การป้องกันการโจมตีแบบ Cross-Site Request Forgery (CSRF)

3.1 ใช้ CSRF Token

เพิ่ม CSRF Token ในคำขอ POST เพื่อป้องกันคำขอที่ไม่ได้รับอนุญาต

การตั้งค่าใน Backend:

  • สร้าง CSRF Token และส่งกลับใน Cookie หรือ Header

การตั้งค่าใน Axios:

import axios from 'axios';

axios.defaults.headers.common['X-CSRF-Token'] = document.querySelector('meta[name="csrf-token"]').getAttribute('content');

3.2 ใช้ SameSite Cookies

ตั้งค่า SameSite สำหรับ Cookies เพื่อป้องกันคำขอข้ามโดเมน

ตัวอย่างการตั้งค่าในเซิร์ฟเวอร์:

app.use(cookieParser());
app.use((req, res, next) => {
  res.cookie('session', 'value', { sameSite: 'strict' });
  next();
});

4. การจัดการ Authentication

4.1 การใช้ JSON Web Token (JWT)

JWT เป็นวิธีที่นิยมสำหรับการจัดการ Authentication และการส่งข้อมูลที่ปลอดภัยระหว่าง Client และ Server

ตัวอย่างการสร้าง JWT:

const jwt = require('jsonwebtoken');
const token = jwt.sign({ userId: 123 }, 'secretKey', { expiresIn: '1h' });

ตัวอย่างการตรวจสอบ JWT:

jwt.verify(token, 'secretKey', (err, decoded) => {
  if (err) {
    console.error('Invalid token');
  } else {
    console.log('Decoded data:', decoded);
  }
});

4.2 การจัดการ Token ใน Vue.js

ใช้ Vuex หรือ Pinia เพื่อเก็บ Token และส่งไปใน Header ของคำขอ

import axios from 'axios';
import { useAuthStore } from '@/stores/auth';

const authStore = useAuthStore();
axios.defaults.headers.common['Authorization'] = `Bearer ${authStore.token}`;

5. การป้องกันข้อมูลรั่วไหล

5.1 การเข้ารหัสข้อมูลที่สำคัญ

เข้ารหัสข้อมูลที่สำคัญ เช่น รหัสผ่าน หรือข้อมูลผู้ใช้ ก่อนจัดเก็บ

ตัวอย่างการเข้ารหัสรหัสผ่าน:

const bcrypt = require('bcrypt');
const hashedPassword = await bcrypt.hash('userPassword', 10);

5.2 การใช้ HTTPS

เปิดใช้งาน HTTPS เพื่อเข้ารหัสข้อมูลระหว่าง Client และ Server

การตั้งค่าใน Nginx:

server {
  listen 443 ssl;
  ssl_certificate /path/to/certificate.crt;
  ssl_certificate_key /path/to/private.key;
}

6. การตั้งค่า Content Security Policy (CSP)

CSP ช่วยป้องกันการโหลดสคริปต์หรือทรัพยากรที่ไม่ได้รับอนุญาต

ตัวอย่างการตั้งค่า CSP ใน Nginx:

add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self';";

7. การตรวจสอบและแจ้งเตือน

7.1 ใช้ Sentry สำหรับ Error Monitoring

Sentry ช่วยตรวจสอบข้อผิดพลาดในแอปพลิเคชัน

การติดตั้ง Sentry:

npm install @sentry/vue

การตั้งค่า:

import * as Sentry from '@sentry/vue';

Sentry.init({
  Vue: app,
  dsn: 'your-dsn-url',
  integrations: [new Sentry.Integrations.BrowserTracing()],
  tracesSampleRate: 1.0
});

8. สรุป

ในบทนี้ คุณได้เรียนรู้วิธีเพิ่มความปลอดภัยในแอปพลิเคชัน Vue.js เช่น การป้องกัน XSS และ CSRF การใช้ JWT สำหรับ Authentication และการตั้งค่า HTTPS เทคนิคเหล่านี้ช่วยป้องกันการโจมตีและรักษาความปลอดภัยของข้อมูลผู้ใช้

ในบทถัดไป เราจะสำรวจวิธีเพิ่มประสิทธิภาพสำหรับ SEO ในแอปพลิเคชัน Vue.js!