เรารับงานพัฒนาโปรแกรมขายรถให้เต้นรถมือสองที่ต่างจังหวัดซึ่งมีหลายสาขา เราจึงออกแบบใช้ API เป็นตัวกลางเผื่อเขาจะเอาไปเชื่อมต่อกับระบบอื่นจะได้ง่าย
คำถามค่ะ
การรับส่งข้อมูลผ่าน API เราใช้วิธีการเข้ารหัส โดยจะมีการเพิ่ม Key เข้าไปด้วย หลักการก็คือ ก่อนส่งข้อมูลก็จะทำการเข้ารหัสด้วย Key เช่น 1234 แล้วเมื่อ API ได้รับค่าก็จะ Decrypt ด้วย Key 1234 เช่นกัน วิธีทำแบบนี้ถือว่าปลอดภัยหริอยัง และเป็นวิธีที่ดีไหมค่ะ
อันนี้สงสัยค่ะ ในเมื่อเราต้องใส่ Key ไว้ใน web.config หรือ appsettings.json แบบนี้จะปลอดภัยหรอค่ะ เพราะถ้าใครเข้ามาที่ server ได้ก็สามารถอ่านได้เลย แต่ถ้าไว้ในโปรแกรมก็จะไม่ยืดหยุ่นอีกเวลาจะเปลี่ยน Key
เครื่อง client มีหลายเครื่องแต่ตัวเว็บจะอยู่ที่ Server เราพอจะมีวิธีเช็คไหมค่ะว่าเมื่อเข้าเว็บแล้วเครื่องนี้เป็นเครื่องหมายเลขอะไร เช่น 01, 02 ช่วยแนะนำด้วยค่ะ ที่เราคิดออกคือสร้าง text file ไว้ที่เครื่อง Client แล้วใส่ข้อความลงไปว่า 01 หรือ 02 แต่ทีนี้ web มันจะอ่าน text file ได้ยังไงอะค่ะ คิดไม่ออกเลย
คำถามที่มีก็เท่านี้ค่ะ
ข้อ 1, 2 เข้ารหัสเพื่ออะไรครับจะได้แนะนำถูก
เข้าเพื่อความปลอดภัยเฉยๆค่ะ ไม่ได้มีอะไรพิเศษเลย คือแค่คิดว่าเวลาส่งข้อมูลไป กลัวจะมีคนดักเอาไปได้ (แต่จริงๆคงไม่มีหลอกมั้งค่ะ) คิดเองล้วนๆเลยค่ะ
ถ้าห่วงเฉพาะคนนอกดักกลางทาง ใช้ HTTPS ครับ ลองศึกษาดูครับ
ขอบคุณค่ะ
แต่ +100 ให้เลยครับกับการคิดเรื่องความปลอดภัยไว้ก่อนแบบนี้ ทั่วไปมักจะมาเป็น afterthought ทั้งๆที่เรื่องนี้ควรมาเป็นอันดับแรกๆ
ถ้าต้องการกัน sniffing attack, MITM เฉยๆใช้ HTTPS ก็พอเพียงอย่างที่คุณ hisoft แนะนำไปครับ
แต่หากมีเหตุผลใดๆต้องทำวิธีอื่น ผมแปะทางไปต่อไว้ให้ - ให้ลองไปดูเรื่องของ Symmetric / Asymmetric Encryption เพิ่มเติมครับ
วิธี 1, 2 ที่กล่าวมาคือ symmetric encryption ซึ่งแก้จุดอ่อนได้ด้วยการทำเป็น asymmetric แทน
ขอบคุณค่ะ
ข้อ 3 ใช้ Request.UserHostName หรือ Request.UserHostAddress
เอกสาร https://docs.microsoft.com/en-us/dotnet/api/system.web.httprequest.userhostname?view=netframework-4.0
ขอบคุณมากๆเลยค่ะ
ขอโทษค่ะ พึ่งเห็นว่าเป็น netframework-4.0
พอดีเราใช้ .net core 2.2 อะค่ะ พอจะมีวิธีอื่นอีกไหมค่ะ
https://stackoverflow.com/questions/27132908/userhostaddress-in-asp-net-core
HHTPS ครับ
รายละเอียด ลองศึกษาเรื่อง public key/private key ดู
หลักการคือ เหมือน server ส่งกล่อง+แม่กุญแจ(public key) มาให้ก่อน
client เอาข้อมูลใส่ในกล่อง เสร็จแล้วส่งกลับ server
server เอาลูกกุญแจ(private key)มาไข เพื่อเปิดอ่าน
คนนอกมา sniff ข้อมูลระหว่างทาง ก็ได้แต่แม่กุญแจไป แต่ไม่มีลูกกุญแจ ก็เปิดอ่านไม่ได้
HHTPS นี่หมายถึง HTTPS หรือเปล่าครับ?