เรารับงานพัฒนาโปรแกรมขายรถให้เต้นรถมือสองที่ต่างจังหวัดซึ่งมีหลายสาขา เราจึงออกแบบใช้ 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
hisoft Thu, 25/04/2019 - 22:02
ข้อ 1, 2 เข้ารหัสเพื่ออะไรครับจะได้แนะนำถูก
เข้าเพื่อความปลอดภัยเฉยๆค่ะ
chiltunder Thu, 25/04/2019 - 22:14
In reply to ข้อ 1, 2 by hisoft
เข้าเพื่อความปลอดภัยเฉยๆค่ะ ไม่ได้มีอะไรพิเศษเลย คือแค่คิดว่าเวลาส่งข้อมูลไป กลัวจะมีคนดักเอาไปได้ (แต่จริงๆคงไม่มีหลอกมั้งค่ะ) คิดเองล้วนๆเลยค่ะ
ถ้าห่วงเฉพาะคนนอกดักกลางทาง
hisoft Thu, 25/04/2019 - 22:21
In reply to เข้าเพื่อความปลอดภัยเฉยๆค่ะ by chiltunder
ถ้าห่วงเฉพาะคนนอกดักกลางทาง ใช้ HTTPS ครับ ลองศึกษาดูครับ
ขอบคุณค่ะ
chiltunder Fri, 26/04/2019 - 08:10
In reply to ถ้าห่วงเฉพาะคนนอกดักกลางทาง by hisoft
ขอบคุณค่ะ
แต่ +100
Configuleto Fri, 26/04/2019 - 21:20
In reply to เข้าเพื่อความปลอดภัยเฉยๆค่ะ by chiltunder
แต่ +100 ให้เลยครับกับการคิดเรื่องความปลอดภัยไว้ก่อนแบบนี้ ทั่วไปมักจะมาเป็น afterthought ทั้งๆที่เรื่องนี้ควรมาเป็นอันดับแรกๆ
ถ้าต้องการกัน sniffing attack, MITM เฉยๆใช้ HTTPS ก็พอเพียงอย่างที่คุณ hisoft แนะนำไปครับ
แต่หากมีเหตุผลใดๆต้องทำวิธีอื่น ผมแปะทางไปต่อไว้ให้ - ให้ลองไปดูเรื่องของ Symmetric / Asymmetric Encryption เพิ่มเติมครับ
วิธี 1, 2 ที่กล่าวมาคือ symmetric encryption ซึ่งแก้จุดอ่อนได้ด้วยการทำเป็น asymmetric แทน
ขอบคุณค่ะ
chiltunder Sat, 27/04/2019 - 11:33
In reply to แต่ +100 by Configuleto
ขอบคุณค่ะ
ข้อ 3
aez Fri, 26/04/2019 - 10:54
ข้อ 3 ใช้ Request.UserHostName หรือ Request.UserHostAddress
เอกสาร https://docs.microsoft.com/en-us/dotnet/api/system.web.httprequest.userhostname?view=netframework-4.0
ขอบคุณมากๆเลยค่ะ
chiltunder Fri, 26/04/2019 - 12:58
In reply to ข้อ 3 by aez
ขอบคุณมากๆเลยค่ะ
ขอโทษค่ะ พึ่งเห็นว่าเป็น
chiltunder Fri, 26/04/2019 - 17:09
In reply to ข้อ 3 by aez
ขอโทษค่ะ พึ่งเห็นว่าเป็น netframework-4.0
พอดีเราใช้ .net core 2.2 อะค่ะ พอจะมีวิธีอื่นอีกไหมค่ะ
https://stackoverflow.com
aez Mon, 29/04/2019 - 16:27
In reply to ขอโทษค่ะ พึ่งเห็นว่าเป็น by chiltunder
https://stackoverflow.com/questions/27132908/userhostaddress-in-asp-net-core
HHTPS ครับ
bodinmon Thu, 02/05/2019 - 14:24
HHTPS ครับ
รายละเอียด ลองศึกษาเรื่อง public key/private key ดู
หลักการคือ เหมือน server ส่งกล่อง+แม่กุญแจ(public key) มาให้ก่อน
client เอาข้อมูลใส่ในกล่อง เสร็จแล้วส่งกลับ server
server เอาลูกกุญแจ(private key)มาไข เพื่อเปิดอ่าน
คนนอกมา sniff ข้อมูลระหว่างทาง ก็ได้แต่แม่กุญแจไป แต่ไม่มีลูกกุญแจ ก็เปิดอ่านไม่ได้
HHTPS นี่หมายถึง HTTPS
hisoft Thu, 02/05/2019 - 16:28
In reply to HHTPS ครับ by bodinmon
HHTPS นี่หมายถึง HTTPS หรือเปล่าครับ?