มีใครเคยเขียนโปรแกรมเกี่ยวกับระบบการเงินบ้างครับ ขอคำแนะนำหน่อย
พอดีเป็นครั้งแรกที่เขียนโปรแกรมลักษณะนี้
ผมกำลังทำ system ตัวนึงที่จะเป็น online wallet และ จ่ายคอมมิชชั่น สมาชิก ระบบที่คิดต้องการความปลอดภัยสูงเพราะเป็นเลขทางการเงิน
ผมคิดหลักการไว้อย่างนี้ครับ ใครเห็นว่ามากไปน้อยไป หรือมีแนวทางที่ดีกว่ารบกวนแชร์ความรู้หน่อยนะครับ
1. ระบบ form มี token และ verify การส่งข้อมูลจาก form ภายในเว็บ
2. การ request โอน ถอน ต้องใส่ 2 Factor ซึ่งผมใช้ Google Authentication Code (GA)
3. การเก็บ ค่า GA ใน ฐานข้อมูลจะ encrypted ด้วย AES-128 cipher ในโหมด CBC + encryption_key and SHA512 HMAC โดย คีย์เก็บ เป็น static ไว้ใน file config บน server
4. Wallet แต่ละคนคำนวนจากการ Transactions - โดย ทุกๆ เดือนจะ archive transactions ที่เก่ากว่า 30วันเข้าไปอีก table นึง แล้วรวมยอดไว้ใน table transaction อีกทีเป็นยอด sum ส่วนข้อมูลเก่ากว่า 30วันก็ถูกย้ายออกจาก table นี้ไป ยอด wallet ก็จะคำนวนจาก ยอดรวมนี้ บวกกับรายการ ฝากถอนโอนต่างๆในรอบเดือน
5. ในรายการ Transaction จะทำ chain เหมือน blockchain โดย รายการ sum เก่ากว่า 30วันจะ มี id เป็นค่า hash ของข้อมูลสุดท้ายที่ archive ไป ค่า hash จะใช้เพื่อตรวจสอบความถูกต้องของข้อมูล โดยจะ นำ ค่าเงิน + เวลา + ประเภท+สมาชิกid แล้ว hash ด้วย id(key) ออกมาเป็น ค่า hash ของ record นั้น แล้วใช้ ค่านี้เป็น id ของ transaction ถัดไป
เชื่อว่าวิธีนี้จะทำให้ ฐานข้อมูลถูกแก้ไขไม่ได้ ถ้ามีการแก้ค่า transaction นั้น ตัว hash จะตรวจว่าเป็น transaction ที่ผิดพลาด
ปัญหาที่ผมมึนคือหากเจอว่าผิด มันจะแก้เป็นถูกได้อย่างไร แล้วผมต้อง backup ข้อมูลอย่างไร ให้สามารถกู้อันที่ถูกต้องกลับมาได้ เพราะการ hash เป็น oneway ไม่เหมือน encrypt ที่ decrypt ได้
ขอความเห็นหน่อยว่า เราควรใส่ใจกับการทำ transaction chain เพือ validate ข้อมูลมากน้อยแค่ใหนและ กรณีนี้ เราควร handdle อย่างไร
กำลังทำโปรแกรมเดี่ยวกับการเงิน ช่วยแนะนำหน่อยว่า แบบนี้พอใหม
พอดีเป็นครั้งแรกที่เขียนโปรแกรมลักษณะนี้
ผมกำลังทำ system ตัวนึงที่จะเป็น online wallet และ จ่ายคอมมิชชั่น สมาชิก ระบบที่คิดต้องการความปลอดภัยสูงเพราะเป็นเลขทางการเงิน
ผมคิดหลักการไว้อย่างนี้ครับ ใครเห็นว่ามากไปน้อยไป หรือมีแนวทางที่ดีกว่ารบกวนแชร์ความรู้หน่อยนะครับ
1. ระบบ form มี token และ verify การส่งข้อมูลจาก form ภายในเว็บ
2. การ request โอน ถอน ต้องใส่ 2 Factor ซึ่งผมใช้ Google Authentication Code (GA)
3. การเก็บ ค่า GA ใน ฐานข้อมูลจะ encrypted ด้วย AES-128 cipher ในโหมด CBC + encryption_key and SHA512 HMAC โดย คีย์เก็บ เป็น static ไว้ใน file config บน server
4. Wallet แต่ละคนคำนวนจากการ Transactions - โดย ทุกๆ เดือนจะ archive transactions ที่เก่ากว่า 30วันเข้าไปอีก table นึง แล้วรวมยอดไว้ใน table transaction อีกทีเป็นยอด sum ส่วนข้อมูลเก่ากว่า 30วันก็ถูกย้ายออกจาก table นี้ไป ยอด wallet ก็จะคำนวนจาก ยอดรวมนี้ บวกกับรายการ ฝากถอนโอนต่างๆในรอบเดือน
5. ในรายการ Transaction จะทำ chain เหมือน blockchain โดย รายการ sum เก่ากว่า 30วันจะ มี id เป็นค่า hash ของข้อมูลสุดท้ายที่ archive ไป ค่า hash จะใช้เพื่อตรวจสอบความถูกต้องของข้อมูล โดยจะ นำ ค่าเงิน + เวลา + ประเภท+สมาชิกid แล้ว hash ด้วย id(key) ออกมาเป็น ค่า hash ของ record นั้น แล้วใช้ ค่านี้เป็น id ของ transaction ถัดไป
เชื่อว่าวิธีนี้จะทำให้ ฐานข้อมูลถูกแก้ไขไม่ได้ ถ้ามีการแก้ค่า transaction นั้น ตัว hash จะตรวจว่าเป็น transaction ที่ผิดพลาด
ปัญหาที่ผมมึนคือหากเจอว่าผิด มันจะแก้เป็นถูกได้อย่างไร แล้วผมต้อง backup ข้อมูลอย่างไร ให้สามารถกู้อันที่ถูกต้องกลับมาได้ เพราะการ hash เป็น oneway ไม่เหมือน encrypt ที่ decrypt ได้
ขอความเห็นหน่อยว่า เราควรใส่ใจกับการทำ transaction chain เพือ validate ข้อมูลมากน้อยแค่ใหนและ กรณีนี้ เราควร handdle อย่างไร