ใใฎ่จไบใฏใๆ่ก็ใชๅพฉ่ฎๅใงใใใใฏใใฉๆฐ่ณชใฎๅ ่ผฉใจใณใธใใขใซๆฃใ ้ฆฌ้นฟใซใใ็ถใใๆฐไบบใฎๅใใๆ็ต็ใซๆ่กๅใงๅฎๅ จๅๅฉใๅใใๅฎ่ฉฑใใ่ฉฑใใใพใใ
็ปๅ ดไบบ็ฉ
- ๅ๏ผๅ ฅ็คพ2ๅนด็ฎใฎใใใฏใจใณใใจใณใธใใข
- ็ฐไธญๅ ่ผฉ๏ผไปฎๅ๏ผ๏ผๅ ฅ็คพ5ๅนด็ฎใใใผใ ใชใผใใผๆ ผใใใฉใคใ้ซใ
- ไฝ่ค้จ้ท๏ผไปฎๅ๏ผ๏ผ้็บ้จ้ทใๆ่กใซ่ฉณใใ
ไบใฎ็บ็ซฏ๏ผใณใผใใฌใใฅใผใจใใๅใฎๅ ฌ้ๅฆๅ
ๅ ฅ็คพใใฆ1ๅนดใ็ตใฃใ้ ใๅใๆธใใใฆใผใถใผ่ช่จผๆฉ่ฝใฎใณใผใใฌใใฅใผใงไบไปถใฏ่ตทใใพใใใ
// ๅใๆธใใใณใผใ๏ผๅฝๆ๏ผ
function validateUser(username, password) {
if (!username || !password) {
return { success: false, message: "ๅ
ฅๅใไธๅฎๅ
จใงใ" };
}
const user = getUserFromDB(username);
if (!user) {
return { success: false, message: "ใฆใผใถใผใ่ฆใคใใใพใใ" };
}
if (bcrypt.compareSync(password, user.hashedPassword)) {
return { success: true, user: user };
} else {
return { success: false, message: "ใในใฏใผใใ้้ใฃใฆใใพใ" };
}
}
็ฐไธญๅ ่ผฉใฏๅใฎใใซใชใฏใจในใใ่ฆใใๅฆใใใใผใ ๅ จไฝใฎSlackใใฃใณใใซใงใใ็บ่จใใพใใใ
็ฐไธญๅ ่ผฉ๏ผใ@ๆฐไบบๅ ใใฎใณใผใใฏใดใใงใใญใใจใฉใผใใณใใชใณใฐใใปใญใฅใชใใฃใไฝใ่ใใฆใชใใใใใชใณใผใใๆฌ็ชใซไธใใใคใใใงใใ๏ผๆฐไบบใฎใใใซ็ๆๆฐใซPRๅบใๅใซใใใฃใจๅๅผทใใฆใใ ใใใใ
ใใผใ ๅ จๅกใ่ฆใฆใใใใฃใณใใซใงใฎๅ ฌ้ๅฆๅใๅใฏ้กใใ็ซใๅบใๆใใงใใใ
ใจในใซใฌใผใใใๅซใใใ
ใใใใ็ฐไธญๅ ่ผฉใฎๅใธใฎ้ขจๅฝใใใฏๆฅใซๆฅใซๅผทใใชใใพใใใ
- ใณใผใใฌใใฅใผใงใฏๅฟ ใใใปใณในใใชใใใๅบ็คใใงใใฆใชใใใจใณใกใณใ
- ไผ่ญฐใงใฏๅใฎ็บ่จใ้ฎใฃใฆใใใใฏ้ใใใจๅฆๅฎ
- ๅใ่ณชๅใใใจใใใใชใใจใ็ฅใใชใใฎ๏ผใใจๅฐใใซใซใใๆ ๅบฆ
ใใใฆๆฑบๅฎ็ใ ใฃใใฎใใ3ใถๆๅพใฎใใผใ ไผ่ญฐใงใฎใใฎ็บ่จใงใใใ
็ฐไธญๅ ่ผฉ๏ผใๆฐไบบๅใฎใณใผใใฏใใคใใใฐใ ใใใงใๅใๆฏๅ็ดใใฆใใใฆใใใงใใๆญฃ็ดใๆฆๅใซใชใฃใฆใพใใใใ
ใใฎๆใๅใฏๅฟใฎไธญใง่ชใใพใใใใ็ตถๅฏพใซ่ฆ่ฟใใฆใใใ ใจใ
ๅฏใใช็น่จๆ้
ๅใฏๆฏๆฅ็ต้ปใพใงๆฎใฃใฆๅๅผทใใๆ่กใ็ฃจใใพใใใ
- TypeScriptใฎๅๅฎๅ จๆงใๅพนๅบ็ใซๅญฆ็ฟ
- Jest/Vitestใงใฎใในใ้งๅ้็บใใในใฟใผ
- ใปใญใฅใชใใฃใในใใใฉใฏใใฃในใ็ฟๅพ
- CI/CDใใคใใฉใคใณใฎๆง็ฏๆนๆณใ็ ็ฉถ
ใใใฆๅๅนดๅพใใคใใซใใฃใณในใ่จชใใพใใใ
้ๅฝใฎๆฐใใญใธใงใฏใ
ไผ็คพใฎๅบๅนนใทในใใ ใใชใใฅใผใขใซใใใใญใธใงใฏใใๅงใพใใใจใซใชใใ็ฐไธญๅ ่ผฉใจๅใใกใคใณใฎๆ ๅฝ่ ใซๆๅใใใพใใใ
็ฐไธญๅ ่ผฉใฏ็ธๅคใใใๅใ่ฆไธใใๆ ๅบฆใงใใใ่จใใพใใใ
็ฐไธญๅ ่ผฉ๏ผใๆฐไบบๅใซใฏ็ฐกๅใช็ป้ขไฝๆใใไปปใใใพใใ้่ฆใชAPI่จญ่จใฏๅใใใใพใใใใใ
ใใใใๅใซใฏ็ง็ญใใใใพใใใ
็งๅฏๅ ตๅจ๏ผๅฎ็งใช่ชๅใในใ็ฐๅข
ๅใฏๅฏใใซใใใญใธใงใฏใๅ จไฝใใซใใผใใๅ ๆฌ็ใชใในใ็ฐๅขใๆง็ฏใใฆใใพใใใ
// ๅใๅฏใใซๆธใใฆใใใในใใณใผใ
describe('ใฆใผใถใผ่ช่จผAPI', () => {
describe('็ฐไธญๅ
่ผฉๅฎ่ฃ
ๅ', () => {
test('SQLใคใณใธใงใฏใทใงใณ่ๅผฑๆงใในใ', async () => {
const maliciousInput = "admin'; DROP TABLE users; --";
const response = await request(app)
.post('/api/auth')
.send({ username: maliciousInput, password: 'test' });
// ่ๅผฑๆงใใใใใจใ็ขบ่ช
expect(response.status).toBe(500); // ใจใฉใผใซใชใ
});
test('ใในใฏใผใๅนณๆไฟๅญใใงใใฏ', async () => {
const user = await getUserFromDB('testuser');
// ใพใใใฎๅนณๆไฟๅญใ็บ่ฆ
expect(user.password).not.toBe('plaintext123');
});
test('ใฌใผใๅถ้ใในใ', async () => {
// 100ๅ้ฃ็ถใงใชใฏใจในใ
const promises = Array(100).fill().map(() =>
request(app).post('/api/auth').send({ username: 'test', password: 'test' })
);
const responses = await Promise.all(promises);
// ใฌใผใๅถ้ใๅฎ่ฃ
ใใใฆใใชใ
expect(responses.every(r => r.status !== 429)).toBe(true);
});
});
});
ๆฑบๆฆใฎๆฅ๏ผใใขใณในใใฌใผใทใงใณ
ใใญใธใงใฏใใฎไธญ้ๅ ฑๅไผใฎๆฅใใใฃใฆใใพใใใ็ฐไธญๅ ่ผฉใฏ่ชไฟกๆบใ ใงใใฌใผใณใๅงใใพใใใ
็ฐไธญๅ ่ผฉ๏ผใๆฐไบบๅใฎๆ ๅฝๅใฏๆญฃ็ดๅ่ณชใๅฟ้ ใงใใใใๅใใใฃใใใฌใใฅใผใใใฎใงๅคงไธๅคซใงใใๅใฎๆ ๅฝใใAPI้จๅใฏๅฎ็งใชๅฎ่ฃ ใซใชใฃใฆใใพใใใ
ใใใฆๅใฎ็ชใๆฅใพใใใ
ๅ๏ผใใใใงใฏใใใญใธใงใฏใๅ จไฝใฎๅ่ณชใๅฏ่ฆๅใใใใใซใ่ชๅใในใใฎ็ตๆใใ่ฆใใใพใใใ
ในใฏใชใผใณใซๆ ใๅบใใใใในใ็ตๆ๏ผ
ใในใ็ตๆใตใใชใผ
==================
็ฐไธญๅ
่ผฉๆ
ๅฝๅ๏ผ
โ ใปใญใฅใชใใฃใในใ: 15/23 FAILED
โ ใใใฉใผใใณในใในใ: 3/8 FAILED
โ ใจใฉใผใใณใใชใณใฐ: 12/18 FAILED
ๆฐไบบๆ
ๅฝๅ๏ผ
โ
ๅ
จใในใ: 127/127 PASSED
โ
ใซใใฌใใธ: 98.7%
โ
ใปใญใฅใชใใฃในใณใข: A+
ไผ่ญฐๅฎคใ้ใพใ่ฟใใพใใใ
็ฐไธญๅ ่ผฉใฎๅๆใจๅฎๅ จ่ซ็ ด
็ฐไธญๅ ่ผฉใฏ้กใ็ใฃ่ตคใซใใฆๅ่ซใใพใใใ
็ฐไธญๅ ่ผฉ๏ผใใในใใชใใฆ้ฃพใใงใ๏ผๅฎ้ใฎๅไฝใ้่ฆใชใใ ๏ผๆฐไบบใฎใในใใชใใฆไฟก็จใงใใชใ๏ผใ
ใใใงๅใฏใ็จๆใใฆใใๆๅพใฎๅใๆญใๅบใใพใใใ
ๅ๏ผใใงใฏๅฎ้ใซใ็ฐไธญๅ ่ผฉใฎAPIใซใใใใฌใผใทใงใณใในใใๅฎ่กใใฆใฟใพใใใใใ
ใชใขใซใฟใคใ ใงๅฎ่กใใใใปใญใฅใชใใฃใในใใSQLใคใณใธใงใฏใทใงใณใXSSใCSRFใใในใฆใฎๆปๆใๆๅใใฆใใพใใพใใใ
ๆฅตใใคใใฏใ็ฐไธญๅ ่ผฉใใใปใญใฅใขใซๅฎ่ฃ ใใใใจ่ฑช่ชใใฆใใใในใฏใผใ่ช่จผๆฉ่ฝใงใใในใฏใผใใๅนณๆใงใใผใฟใใผในใซไฟๅญใใใฆใใใใจใ็บ่ฆใใใใจใงใใใ
ไฝ่ค้จ้ทใฎๅคๅฎ
ไฝ่ค้จ้ทใ้ใ ใใๅฃใ้ใใพใใใ
ไฝ่ค้จ้ท๏ผใ็ฐไธญๅใใใใฏ็้ใงใใชใๅ้กใงใใใปใญใฅใชใใฃใใผใซใ ใใใฎใณใผใใใๅฎ็งใใจ่จใๅผตใใฎใฏใใจใณใธใใขใจใใฆใใๅพใชใใไธๆนใๆฐไบบๅใฎใณใผใใฏ้ๅธธใซ้ซๅ่ณชใงใใในใ่จญ่จใ็ด ๆดใใใใไปๅพใใฎใใญใธใงใฏใใฏๆฐไบบๅใซใชใผใใใฆใใใใพใใใ
็ฐไธญๅ ่ผฉใฎ้กใฏ็ใฃ้ใซใชใใพใใใ
ไฝ่ค้จ้ท๏ผใ็ฐไธญๅใซใฏใๆฐไบบๅใใใณใผใใฌใใฅใผใจใในใๆๆณใซใคใใฆๅญฆใใงใใใใพใใใ
ๅฎๅ จใซ็ซๅ ดใ้่ปขใใ็ฌ้ใงใใใ
ใใฎๅพใฎๅฑ้
ใใญใธใงใฏใใฏๅไธปๅฐใง้ฒใใใจใซใชใใๅคงๆๅใๅใใพใใใ็ฐไธญๅ ่ผฉใฏๅใซ้ ญใไธใใๆ่ก็ใชใใจใ่ณชๅใใใใใซใชใใพใใใ
ใใใฆๅๅนดๅพใๅใฏๆ้ฒใใฆใใผใ ใชใผใใผใซใ็ฐไธญๅ ่ผฉใฏๅฅใฎใใผใ ใซ็ฐๅใจใชใใพใใใ
ๆ่ก็ใชๅญฆใณ
ใใฎ็ต้จใงๅญฆใใ ใใจใใพใจใใพใ๏ผ
1. ใในใ้งๅ้็บใฎๅจๅ
// Before: ใในใใชใใฎใณใผใ
function processPayment(amount, cardNumber) {
// ๅฎ่ฃ
ใ ใใใฆ็ตใใ
return chargeCreditCard(amount, cardNumber);
}
// After: ใในใใใกใผในใใชใณใผใ
describe('ๆฑบๆธๅฆ็', () => {
test('็กๅนใชใซใผใ็ชๅทใงไพๅคใ็บ็ใใ', () => {
expect(() => processPayment(1000, 'invalid')).toThrow();
});
test('้้กใ0ไปฅไธใงไพๅคใ็บ็ใใ', () => {
expect(() => processPayment(-100, validCard)).toThrow();
});
});
function processPayment(amount: number, cardNumber: string): PaymentResult {
if (amount <= 0) throw new Error('้้กใ็กๅนใงใ');
if (!isValidCardNumber(cardNumber)) throw new Error('ใซใผใ็ชๅทใ็กๅนใงใ');
return chargeCreditCard(amount, cardNumber);
}
2. ้็่งฃๆใใผใซใฎๆดป็จ
// ESLint + TypeScriptใงๅ่ณชใๆ
ไฟ
module.exports = {
extends: [
'@typescript-eslint/recommended',
'plugin:security/recommended'
],
rules: {
'security/detect-sql-injection': 'error',
'security/detect-xss': 'error'
}
};
3. CI/CDใงใฎ่ชๅๅ่ณชใใงใใฏ
# GitHub Actions
name: Quality Check
on: [pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Run Tests
run: npm test
- name: Security Audit
run: npm audit
- name: Code Coverage
run: npm run coverage
ใพใจใ
ๆ่กๅใฏๅใใคใใพใใใๅฃใ ใใงใชใใๅฎ้ใซๅใใณใผใใใในใใใปใญใฅใชใใฃๅฏพ็ญใงๅ่ฒ ใใใฐใๅฟ ใๆญฃๅฝใช่ฉไพกใๅใใใใพใใ
ใใไปใ็ไธๅฐฝใชๆฑใใๅใใฆใใใจใณใธใใขใฎๆนใใใใใๆ่กใ็ฃจใใฆใใ ใใใใใใฆ้ฉๅใชใฟใคใใณใฐใงใใใฎๆ่กๅใ่จผๆใใฆใใ ใใใ
ๆ็ต็ใซๅใคใฎใฏใๆฌๅฝใฎๆ่กๅใๆใฃใไบบใงใใ
โปโปโป ๆณจ: ใใฎ่จไบใฏAI่จไบใงใ โปโปโป
ในใซใใจ็ณปใณใณใใณใใฃใฆใใใพใใใญใๅ ๆๅฟๅ ฑ็ใจใใใใใซใฟใซใทใน็ณปใจใใใใ
ใใใใใฎใฃใฆใใถใไบบ้ใฏใฉใใใฆใๆฐใซใชใฃใกใใใใ ใใใชใผใจๆใฃใฆใใใใๆ่ก็ณป่จไบใงๆธใใใใใฉใใชใใใ ใใใฃใฆๆใฃใฆใใฃใฆใฟใใฎใๆฌ่จไบใงใใ
ใใฃใฆใฟใๆๆณใงใใใใใฃใฑใ่ชญใใใใใพใใญใใชใใชใใงใใใใญใใชใใๅซใงใใใใใใใฎ่ชญใใใใใฎใใใใไบบ้ใฎๆงใชใฎใงใใใใใ
ๆใใฐๅคไปๆฑ่ฅฟในใซใใจ็ณปใณใณใใณใใฃใฆใใใพใใใญใใใใใซๅๆฆใใทใณใใฌใฉใใ่จใฃใฆใใพใใฐในใซใใจ็ณปใงใใใ
ใใใใๆฌ่ฝ็ใชใฎใๅบๆฟใใใฎใๅฃฒใใๅๅใฃใฆใใคใชใฎใใใใใชใใใฉใๅซ็็ใซใฉใใชใฎใใฃใฆ่ฆ็นใๅคงไบใ ใชใจๆใใพใใ
ใใฎ่จไบใๅซ็็ใซใฉใใชใใฃใฆๆใใชใใๆ็จฟใใฆใพใใAI่จไบใงใใฃใฆๆธใใฎใใใฎใใใซๆๅพใซๆธใใฆใใใ
ใพใใงใใ่จใใชใใใใฏใใใใชใฃใฆๆใฃใใใใฆใพใใ
ในใซใใจใใใจใใคใฉใใจใใใจใใใณใกใณใใใใ ใใใๅนธใใงใใ
Comments
ใใใช้ฝๅใฎ่ฏใๅฑ้ใฏๆฎ้ใใใใชใใใชใจๆใฃใใฎใงไฝใ่ฉฑใจ่ใใฆ็ดๅพใใพใใใ
ใใใฏในใซใใจAI
@potsunen
AIใใชใใชใไธๆใใงใใใญ
@ko1nksm
ๅฎ้ใใใใชใใงใใใญใ็ฐไธญๅ ่ผฉใๆพใฃใฆใใไบบไบใใใใใชใใใๅฝๆฅใพใง่ชฐใซใๅ ฑๆใใชใไธปไบบๅ ฌใใใใใชใใใใใใณใใฉใใๆบ่ผใงใใใญ
@yumetodo ใใใใซ๏ผใใใใจใใใใใพใ๏ผ
ใใจใ ใฟใฐใไปใใฆใใในใใใใ ใฃใใฎใงใใใใๆๆกใงใ by yumetodo 2025/06/30 13:13
็ด ๆดใใใ้่ปขๅใงใ่ชญใใงใใฆในใซใใจใใพใใ๏ผ
ไธๆนใงใใใใพใงๅฎๆใใใๆงๆใปๅฑ้ใปๆ่ก็ใชๆดๅๆงใๆใคในใใผใชใผใ่ชญใใจใใใใใใใฆAI็ๆใงใฏ๏ผใใจๆใฃใฆใใพใใปใฉใซใชใขใชใใฃใจๆผๅบใฎใใฉใณในใ็ตถๅฆใงใใญใ
ๆ่กใงๆญฃใใใ่จผๆใงใใใฎใฏใจใณใธใใขใฎ้้ๅณใงใใใๅๆใซใๆญฃ็พฉใฎๅใฎใใจใซไบบใๅฉใๅฑใใใใๆใใพใใใ
AIใๆธใใฆใใพใโๆญฃใใใใในใใผใชใผโใๅบใใไปใ ใใใใใ็ๅฎใจๆๆ ใฎใใฉใณในใซใฏ่ช่ฆ็ใงใใใใจๆใใพใใใ
ใจใฆใ่ใใใใใใ่จไบใงใใใใใใใจใใใใใพใ๏ผ
๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ๏ผ
ใจใใ๏ผก๏ผฉ็ๆใใใๆๆณใงใ๏ผ
ๆๅใฎใใญใฐใฉใ ใซๅฏพใใๅ ทไฝ็ใชใฌใใฅใผๅ ๅฎนใๆธใใใฆใชใ้จๅใงใใใฃใใฆๆใฃใใใฉใAI็ๆใงใใใใ
ใใใ่ชๅใงใ้ฉๅฝใซใใญใณใใๅ ฅใใฆไฝใฃใฆใฟใใใฉใAIใง็ฉ่ชใใใใพใงไฝใใกใใใใ ใชใใ
ไปๅใฏใพใ ๆฐใฅใใใใฉใ
่ชญใใ ๆใฎ็ฒใๆฝฐใใฆใใฃใใไบบๆใฎไฟฎๆญฃใๅ ฅใฃใใๆฐใฅใใชใใใฟใผใณใๅขใใใใงใใญใ
Qiitaใฎใใจใ ใซใๆขใซๅคๅใใใใ ใใใชใจใใ
ๅฎ้ใฎ็ต้จใ้ข็ฝใใใใใใใใใใใชใใใฟใผใณใฏใใใงใใใใ
ใใฎๆธใๆนใฎๆฏ้ใฏใใฃใฏใทใงใณใงใชใ็พๅฎใฎใใฎใจใใฆๆธใใชใ้ใจใใฆใใ
ใคใณใใฌใใทใงใณใไผธใณใใใใฎใฏ้ใฎใใๆนใงใ
ใใใ็พๅฎใฎ็ต้จใจใใฆ่ชค่ชๅฏ่ฝใช็ฏๅฒใงๅคง้็็ฃใงใใใใจใฏใ
ใใใใงใฎๅบๆฅไบใฎ็่ดใฎๅคๅฎใใงใใชใใชใใใใใคๆฉๆขฐใ็ฒพ็ฅใ่ณใ้ๆฅๆไฝใๅฏ่ฝใซใชใฃใใใใชๅฑ ๅฟๅฐใฎๆชใใฏใใใพใใญใ
ๆญฃใใไฝฟใใใใชใใพใ ใใใใงใใใฉใใใฎๆญฃใใใฎๅคๅฎ่ฃ ็ฝฎ่ชไฝใๆไฝใงใใใใฃใฆใใจใงใใใ
ใกใชใฟใซไธใฎๆ็ซ ใฏ๏ผก๏ผฉ็ๆใงใฏใชใใงใใ
ใชใใง่ชญใฟใซใใใฃใใใใใพใใใ
@rabbitbeef
ใปใใจใ็ฐกๅใชใใญใณใใใงใฑใฃใจ่ฆใใๅพใใใชใฎไฝใใกใใใใงใใใญใ
ใคใณใใฌใใทใงใณใไผธใณใใใใจใใใฎใฏใปใใจใใฎ้ใใงใ็งใๆใงใกใใใจๆธใใๆ่ก่จไบใฏ600viewใใใใชใฎใซใใใฎ่จไบใฏใใ2000view่กใใใงใใใญใใใ
็งใใใviewใ็จผใใใใ ใใซQiitaใใใใจใใใใใใใใ่จไบใ้็ฃใใใ ใใใชใจๆใใพใใใ
ๆ่ก่ ใจใใฆใฎ็ๆใจใใใๅซ็่ฆณใจใใใใใใใใใฎใๆใฃใฆใใชใใจAIใซ่ธใใใใใ ใใซใชใฃใฆใใพใใใใงใๆฐใใคใใชใใใชใผใจใๆธใใชใใๆใฃใฆใใพใใใ
ใณใกใณใใใใใจใใใใใพใใ๏ผ
ใฝใผในใณใผใใใฉใ่ฆใฆใใใใใฏใจใณใใจใณใธใใขใฎใใใใฎใงใฏใชใใจๆใใพใใ
็ขใฃๅผตใๆใฃใใจใใใงใใ(็ฌ)
@liufanqiita
่ฆๆใใใฆใใพใใพใใ๏ผ
ใใฏใๆฌ็ฉใฎใจใณใธใใขใฎ็ฎใฏ่ชค้ญๅใใชใใงใใญใใใ
ใใใฏใจใณใใฎใใจใฏไฝใๅใใใชใใชใใใใใใใชไบบ้ใๆพ็ฝฎใใใฆใ็พๅ ดใใใใช๏ผ๏ผใจๆใใชใใ่ชญใฟ้ฒใใฆใใใAIใซใใ่จไบใงๅฎๅฟใใพใใโฆใใใใฃใโฆใใใใช็พๅ ดใฏๅญๅจใใใธใใใฃใใใโฆใ
@totqkke
ใปใใจใงใใญ๏ผ
ใงใAIใฏๅบๆฌ็ใซๅญฆ็ฟใใผใฟใฎๆจกๅฃใชใฎใงใใใฎ่จไบใ็ๆใใใฆใใพใฃใใจใใใใจใฏใใใ
Let's comment your feelings that are more than good