1. XSS防护
Vue.js内置的XSS防护
Vue.js默认会对模板中的数据进行HTML转义,防止XSS攻击。
// 安全的文本插值
<template>
<div>{{ userInput }}</div>
</template>
// 不安全的HTML插值(谨慎使用)
<template>
<div v-html="userInput"></div>
</template>
安全警告
使用v-html指令时要特别小心,确保内容是可信的。
2. CSRF防护
CSRF Token实现
在发送请求时添加CSRF Token进行防护。
// axios配置
import axios from 'axios'
const api = axios.create({
baseURL: '/api',
headers: {
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content
}
})
// 使用示例
async function submitForm() {
try {
await api.post('/submit', formData)
} catch (error) {
console.error('提交失败:', error)
}
}
3. 数据验证
输入验证
始终验证用户输入,防止恶意数据。
// 使用vuelidate进行表单验证
import { useVuelidate } from '@vuelidate/core'
import { required, email, minLength } from '@vuelidate/validators'
export default {
setup() {
const rules = {
username: { required, minLength: minLength(3) },
email: { required, email }
}
const state = reactive({
username: '',
email: ''
})
const v$ = useVuelidate(rules, state)
return { state, v$ }
}
}
4. 敏感数据处理
数据加密
敏感数据应该加密存储和传输。
// 使用crypto-js进行数据加密
import CryptoJS from 'crypto-js'
// 加密数据
function encryptData(data, key) {
return CryptoJS.AES.encrypt(JSON.stringify(data), key).toString()
}
// 解密数据
function decryptData(encryptedData, key) {
const bytes = CryptoJS.AES.decrypt(encryptedData, key)
return JSON.parse(bytes.toString(CryptoJS.enc.Utf8))
}
5. 路由安全
路由守卫
使用路由守卫控制页面访问权限。
// 路由守卫示例
router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth && !isAuthenticated()) {
next('/login')
} else if (to.meta.requiresAdmin && !isAdmin()) {
next('/403')
} else {
next()
}
})
6. 依赖安全
依赖检查
定期检查依赖包的安全漏洞。
# 使用npm audit检查依赖
npm audit
# 使用yarn audit检查依赖
yarn audit
# 自动修复安全漏洞
npm audit fix
安全最佳实践
- 定期更新依赖包
- 使用HTTPS
- 实施适当的访问控制
- 记录安全日志
- 进行安全测试