Tags:

เรารับงานพัฒนาโปรแกรมขายรถให้เต้นรถมือสองที่ต่างจังหวัดซึ่งมีหลายสาขา เราจึงออกแบบใช้ API เป็นตัวกลางเผื่อเขาจะเอาไปเชื่อมต่อกับระบบอื่นจะได้ง่าย
คำถามค่ะ

  1. การรับส่งข้อมูลผ่าน API เราใช้วิธีการเข้ารหัส โดยจะมีการเพิ่ม Key เข้าไปด้วย หลักการก็คือ ก่อนส่งข้อมูลก็จะทำการเข้ารหัสด้วย Key เช่น 1234 แล้วเมื่อ API ได้รับค่าก็จะ Decrypt ด้วย Key 1234 เช่นกัน วิธีทำแบบนี้ถือว่าปลอดภัยหริอยัง และเป็นวิธีที่ดีไหมค่ะ

  2. อันนี้สงสัยค่ะ ในเมื่อเราต้องใส่ Key ไว้ใน web.config หรือ appsettings.json แบบนี้จะปลอดภัยหรอค่ะ เพราะถ้าใครเข้ามาที่ server ได้ก็สามารถอ่านได้เลย แต่ถ้าไว้ในโปรแกรมก็จะไม่ยืดหยุ่นอีกเวลาจะเปลี่ยน Key

  3. เครื่อง client มีหลายเครื่องแต่ตัวเว็บจะอยู่ที่ Server เราพอจะมีวิธีเช็คไหมค่ะว่าเมื่อเข้าเว็บแล้วเครื่องนี้เป็นเครื่องหมายเลขอะไร เช่น 01, 02 ช่วยแนะนำด้วยค่ะ ที่เราคิดออกคือสร้าง text file ไว้ที่เครื่อง Client แล้วใส่ข้อความลงไปว่า 01 หรือ 02 แต่ทีนี้ web มันจะอ่าน text file ได้ยังไงอะค่ะ คิดไม่ออกเลย

คำถามที่มีก็เท่านี้ค่ะ

Get latest news from Blognone
By: hisoft
ContributorWindows PhoneWindows
on 25 April 2019 - 22:02 #1107365
hisoft's picture

ข้อ 1, 2 เข้ารหัสเพื่ออะไรครับจะได้แนะนำถูก

By: chiltunder on 25 April 2019 - 22:14 #1107366 Reply to:1107365

เข้าเพื่อความปลอดภัยเฉยๆค่ะ ไม่ได้มีอะไรพิเศษเลย คือแค่คิดว่าเวลาส่งข้อมูลไป กลัวจะมีคนดักเอาไปได้ (แต่จริงๆคงไม่มีหลอกมั้งค่ะ) คิดเองล้วนๆเลยค่ะ

By: hisoft
ContributorWindows PhoneWindows
on 25 April 2019 - 22:21 #1107367 Reply to:1107366
hisoft's picture

ถ้าห่วงเฉพาะคนนอกดักกลางทาง ใช้ HTTPS ครับ ลองศึกษาดูครับ

By: chiltunder on 26 April 2019 - 08:10 #1107385 Reply to:1107367

ขอบคุณค่ะ

By: Configuleto
AndroidWindows
on 26 April 2019 - 21:20 #1107523 Reply to:1107366
Configuleto's picture

แต่ +100 ให้เลยครับกับการคิดเรื่องความปลอดภัยไว้ก่อนแบบนี้ ทั่วไปมักจะมาเป็น afterthought ทั้งๆที่เรื่องนี้ควรมาเป็นอันดับแรกๆ

ถ้าต้องการกัน sniffing attack, MITM เฉยๆใช้ HTTPS ก็พอเพียงอย่างที่คุณ hisoft แนะนำไปครับ

แต่หากมีเหตุผลใดๆต้องทำวิธีอื่น ผมแปะทางไปต่อไว้ให้ - ให้ลองไปดูเรื่องของ Symmetric / Asymmetric Encryption เพิ่มเติมครับ

วิธี 1, 2 ที่กล่าวมาคือ symmetric encryption ซึ่งแก้จุดอ่อนได้ด้วยการทำเป็น asymmetric แทน

By: chiltunder on 27 April 2019 - 11:33 #1107566 Reply to:1107523

ขอบคุณค่ะ

By: aez
AndroidWindows
on 26 April 2019 - 10:54 #1107436

ข้อ 3 ใช้ Request.UserHostName หรือ Request.UserHostAddress
เอกสาร https://docs.microsoft.com/en-us/dotnet/api/system.web.httprequest.userhostname?view=netframework-4.0

By: chiltunder on 26 April 2019 - 12:58 #1107454 Reply to:1107436

ขอบคุณมากๆเลยค่ะ

By: chiltunder on 26 April 2019 - 17:09 #1107507 Reply to:1107436

ขอโทษค่ะ พึ่งเห็นว่าเป็น netframework-4.0
พอดีเราใช้ .net core 2.2 อะค่ะ พอจะมีวิธีอื่นอีกไหมค่ะ

By: aez
AndroidWindows
on 29 April 2019 - 16:27 #1107796 Reply to:1107507

https://stackoverflow.com/questions/27132908/userhostaddress-in-asp-net-core

By: bodinmon
AndroidWindows
on 2 May 2019 - 14:24 #1108270
bodinmon's picture

HHTPS ครับ
รายละเอียด ลองศึกษาเรื่อง public key/private key ดู

หลักการคือ เหมือน server ส่งกล่อง+แม่กุญแจ(public key) มาให้ก่อน
client เอาข้อมูลใส่ในกล่อง เสร็จแล้วส่งกลับ server
server เอาลูกกุญแจ(private key)มาไข เพื่อเปิดอ่าน
คนนอกมา sniff ข้อมูลระหว่างทาง ก็ได้แต่แม่กุญแจไป แต่ไม่มีลูกกุญแจ ก็เปิดอ่านไม่ได้

By: hisoft
ContributorWindows PhoneWindows
on 2 May 2019 - 16:28 #1108290 Reply to:1108270
hisoft's picture

HHTPS นี่หมายถึง HTTPS หรือเปล่าครับ?