06 กันยายน 2557

[Android Dev Tips] การขอ Permission เยอะๆบนแอนดรอยด์นั้นมันอันตรายจริงๆหรือ? [Study Case จาก Pantip]


        สำหรับบทความนี้จะเรียกว่าบทความเฉพาะกิจก็ได้ เนื่องมาจากเมื่อวาน (ถ้านับจากวันที่เขียนบทความนี้) ได้มีกระทู้พันทิปที่มีเนื้อหาเกี่ยวกับเรื่อง Permission ในแอปพลิเคชันแอนดรอยด์ตัวหนึ่งถูกแชร์ในวงโซเชียลให้เห็นกัน ซึ่งเจ้าของบล็อกไม่ขอระบุชื่อแอพ แต่ขอใช้เป็นชื่อย่อว่า Facebook Messenger ละกัน และก็ไม่ขอเปิดเผยกระทู้นั้นด้วยนะครับ แต่ถ้าอยากจะอ่านก็ตามเข้าไปอ่านกันได้ที่ เตือน! ผู้ใช้บริการ Facebook Messenger App มันน่ากลัวมากๆ


        ดังนั้นบทความในวันนี้จึงเป็นบทความเฉพาะกิจที่จะเน้นความรู้ในระบบแอนดรอยด์ซะหน่อย เพื่อที่ว่าทั้ง User และ Dev ที่หลงเข้ามาอ่านจะได้อ่านกันได้ง่ายๆ ว่า Permission คืออะไร? และการขอ Permission เยอะๆมันอันตรายจริงๆหรือป่าว? และข้อมูลในกระทู้ดังกล่าวเชื่อถือได้แค่ไหน?


Permission มันคืออะไร?

        Permission บนแอนดรอยด์นั้นมีไว้เพื่อให้แอพฯแต่ละตัวขออนุญาตกับระบบเพื่อให้แอพฯสามารถเข้าถึงข้อมูลหรือการทำงานบางส่วนที่ระบบป้องกันไว้ไม่ให้ละเมิดผู้ใช้ได้ง่ายๆ ดังนั้นเวลา Dev เค้าเขียนแอพฯกัน เวลาเขียนโค๊ดให้แอพฯทำงานบางอย่างที่ต้องขอ Permission เพื่อเข้าถึง เค้าก็จะประกาศไว้ในไฟล์ที่เรียกว่า AndroidManifest.xml

        เช่น แอพฯนั้นเป็นแอพฯถ่ายภาพ เพราะงั้น Permission หลังๆที่จะต้องขอเลยก็คือ Camera (ชื่อเต็มๆคือ android.permission.CAMERA) ไม่เช่นนั้นแอพฯก็จะใช้กล้องไม่ได้ 


        ซึ่ง Permission ที่ว่านี่ก็จะถูกนำไปแสดงให้เห็นในตอนที่ผู้ใช้จะติดตั้งแอพฯ ไม่ว่าจะโหลดจาก Google Play Store หรือติดตั้งจาก APK ก็ตาม




        โดย User ที่รอบคอบ เวลาดาวน์โหลดและติดตั้งแอพฯลงเครื่องก็มักจะเช็คดูก่อนว่าแอพฯตัวนั้นมี Permission อะไรบ้าง เหมาะสมหรือไม่ 

        แต่ปัญหามันดันอยู่ที่ การขอ Permission ที่ไม่ได้ระบุเจาะจง แต่เป็นการระบุโดยรวมแทน เช่น แอพฯที่จะขออ่านรายชื่อ Contact เพื่อไปทำเป็นรายชื่อให้เลือกผ่านแอพฯตัวเองเท่านั้น แต่การขอ Permission สำหรับ Contact นั้นกลับรวมไปถึงการแก้ไขข้อมูล เพิ่ม ลบรายชื่อผู้ติดต่อได้ด้วย หรือแม้แต่ Permission ของ SMS ก็จะคล้ายๆกัน

        ขอเพื่อ 1 อย่าง แต่ดันทำได้หลายอย่าง 




        และคำอธิบายเวลาดาวน์โหลดและติดตั้งแอพฯก็ดันบอก Permission แบบโดยรวมทั้งหมดด้วย ถ้าสังเกตดีๆไม่ว่าจะเป็นแอพฯตัวไหนถ้ามีการขอ Permission บางอย่างที่เหมือนกัน ก็จะมีคำอธิบายใน Permission นั้นๆเหมือนกันเป๊ะ ทั้งๆที่การทำงานอาจจะแตกต่างกันก็ได้




        จึงทำให้ User เกิดอาการระแวงหรือกระต่ายตื่นตูมขึ้นมาได้ไม่ยากว่า "เฮ้ย ทำไมแอพฯนี้ขออะไรเยอะจังวะ!!" ซึ่งในความเป็นจริงแอพฯส่วนใหญ่ประกาศขอไว้แต่ไม่ได้หมายถึงว่าจะต้องเรียกใช้งานตลอดเวลา 

        อย่างเช่น Facebook Messenger ที่จะมีขอ Permission เป็น Location Access หรือก็คือสามารถอ่านตำแหน่งของผู้ใช้ได้ แต่ก็ไม่ได้หมายความว่าผู้ใช้ทุกคนจะต้องโดนแอพฯตัวนี้ดึงตำแหน่งของผู้ใช้ได้ เพราะว่าเค้าก็จะมีปุ่มเปิดปิดการใช้งานในส่วนนี้อยู่แล้ว เพื่อไม่ให้ละเมิดความเป็นส่วนตัวถ้าผู้ใช้ไม่ยินยอม



        ในแง่ของ Dev ก็คือการขอ Permission นั้นจะต้องประกาศทิ้งไว้อยู่แล้ว แต่ทว่าผู้ใช้จะเรียกใช้งานฟังก์ชันที่เกี่ยวข้องกับ Permission นั้นๆด้วยหรือป่าวก็เป็นอีกเรื่องหนึ่ง ซึ่งในเรื่องของ Location Access เนี่ย ถ้าเอาซีเรียสจริงๆตัวระบบแอนดรอยด์ก็สามารถตรวจสอบได้อยู่แล้วว่ามีแอพฯไหนใช้งานอยู่ และจะปิดจากตรงนี้เลยก็ได้ เพราะเป็น Main Settings


นักพัฒนาจงอ่านตรงนี้กันซะ

        มี Dev ที่หลงเข้ามาอ่านหลายๆคนมักจะถามอยู่บ่อยๆว่า 

        "ถ้าเครื่องผู้ใช้ปิด Location Access อยู่ มีวิธีสั่งให้มันเปิดได้มั้ย" 

        "มีวิธีไหนที่จะทำให้ Bluetooth เปิดอัตโนมัติ เมื่อผู้ใช้กดปิด"

        ซึ่งความคิดเหล่านี้เป็นความคิดที่ผิดนะครับ เพราะว่าเป็นการไปละเมิดข้อมูลส่วนตัวหรือใช้งานบางอย่างโดยที่ผู้ใช้ไม่ได้รับอนุญาต 

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

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



แอพฯฟรีแบบนี้ก็ต้องหวังผลอะไรบ้างนี่

        อันนี้เป็นเรื่องจริงครับ แอพฯฟรีๆที่มีให้ดาวน์โหลดกันทุกวันนี้ ส่วนใหญ่มักจะหวังผลประโยชน์อยู่แล้ว ไม่ว่าจะทางตรงหรือทางอ้อม แต่ก็ไม่ได้หมายความว่าจะต้องไปแอบดึงข้อมูลผู้ใช้มาขายซะหน่อย เพราะวิธีจะได้ผลประโยชน์จากแอพฯฟรีก็มีเป็น 108 วิธีที่ไม่ต้องไปทำอะไรผิดๆ เช่น ติดโฆษณาหารายได้ หรือเก็บข้อมูลจากการใช้งานเพื่อนำไปใช้ประโยชน์ (ที่ไม่ได้แอบไปดึงข้อมูลโดยไม่ได้รับอนุญาต) อย่างเช่น Tikko ที่ให้ผู้ใช้ทำแบบสอบถามเพื่อสะสมแต้มแลกของรางวัล โดยเจ้าของแอพฯก็นำข้อมูลดังกล่าวไปใช้ประโยชน์


        ว่าแล้วก็โฆษณาเลยดีกว่า เป็นแอพฯเจ๋งๆจาก Startup ชื่อดังของคนไทยด้วยกันที่ชื่อว่า Fastinflow สามารถดาวน์โหลดกันได้ที่ Tikko [Google Play]

        ดังนั้นจากกระทู้พันทิปที่บอกว่าเจอโฆษณาร้านค้าที่ตนเองไปซื้อของมา ทั้งๆที่ไม่เคยมีประวัติการค้นหาในเครื่องเลย ก็มาจากการที่ตนเองเปิด Location Access ทิ้งไว้ แล้วแอพฯต่างๆ (ไม่ได้มีแค่ Facebook Messenger หรอก) ที่เก็บประวัติไว้เพื่อใช้เป็นข้อมูลในการนำเสนอโฆษณา 

        ถ้าถามว่าผิดมั้ย? ไม่ผิดหรอก เพราะเจตนาของเค้าคือแสดงโฆษณาที่เหมาะกับผู้ใช้ให้มากที่สุดเท่าที่ทำได้ ดังนั้นเค้าก็จะอิงข้อมูลที่มีอยู่ เช่น Location หรือประวัติการใช้งาน Browser (ถ้าผู้ที่หลงเข้ามาอ่านคนใดทำงานด้านนี้จะรู้ว่าสามารถใช้ข้อมูลหลายๆอย่างมาช่วยเลือกโฆษณาที่จะแสดงให้ผู้ใช้ได้) ดังนั้นถ้าไม่ต้องการก็ควรจะปิด Location Access หรือตั้งค่าให้ไม่เก็บข้อมูลบางอย่างก็ได้ 



ความเห็นส่วนตัวจากกระทู้ดังกล่าวในพันทิป

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

        ยกตัวอย่างเช่น

        App สามารถระบุตำแหน่งที่เราอยู่ได้อย่างชัดเจน เช่น ตอนนี้คุณอยู่ในห้องน้ำชั้น 3 ฝั่ง North ของ Siam Paragon

        ซึ่งในความเป็นจริงมือถือไม่สามารถระบุตำแหน่งจากในอาคารได้แม่นๆขนาดนั้น เพราะ GPS ไม่สามารถเข้าถึงในอาคารได้ ยิ่งเป็นห้างใหญ่หลายชั้นยิ่งไม่ต้องพูดถึง และการอิงตำแหน่งจากสัญญาณมือถือก็ไม่สามารถระบุได้แม่นยำเท่า GPS แน่ๆ (คลาดเคลื่อนเป็นร้อยเมตร)

         ซึ่ง Dev หลายๆคนที่เคยทำแอพฯเกี่ยวกับ Location Access ย่อมรู้กันดี และมี Dev หลายคนที่ถามอยู่บ่อยๆว่าทำไงให้จับตำแหน่งในอาคารได้แม่นๆ เพราะมันทำไม่ได้อยู่แล้ว ถ้ามันทำได้จริงถึงกับบอกว่าอยู่ในห้องน้ำชั้น 3 ได้ เหล่า Dev ที่เขียนแอพฯเกี่ยวกับสถานที่ก็คงฉลองกันแล้ว

        และคนที่เล่น Ingress ก็ย่อมรู้ดีกันอยู่แล้วละเนอะ XD


        App สามารถถ่ายรูป ถ่ายวิดีโอ และอัดเสียง Audio จากมือถือเราได้ (อันนี้น่ากลัวมากๆ แม้เราไม่ได้เปิดใช้งานกล้องก็ตาม)

        อันนี้ก็เป็นแค่ฟีเจอร์ของตัวแอพฯเท่านั้นที่สามารถพูดแทนการพิมพ์ ส่งไฟล์ภาพหรือวีดีโอให้กัน 


        

สรุปทิ้งท้าย

        สำหรับ Permission บนระบบแอนดรอยด์จะเรียกว่าเป็น "ดาบสองคม" ก็ว่าได้ เพราะว่าการประกาศ Permission สำหรับ Dev นั้นเป็นเรื่องปกติ แต่ก็ไม่รัดกุมพอจนทำให้ User เข้าใจผิดได้ ซึ่งทั้งนี้ทั้งนั้นขึ้นอยู่กับเจตนาของ Dev เพียงอย่างเดียวเลย เพราะถ้าจะนำไปใช้ในทางที่ผิดก็สามารถทำได้ อย่างเช่นที่พี่เนยจาก nuuneoi.com ที่เคยทำตัวอย่างไว้ว่าการเขียนแอพฯเพื่อแอบดึงข้อมูลนั้นทำได้ไม่ยาก สิ่งที่ไม่เคยมีใครบอกคุณมาก่อน "มันง่ายมากที่จะเขียนแอพฯมาขโมยข้อมูลส่วนตัวคุณ" ซึ่งพี่เนยก็ทำให้ดูกันจริงๆเลย จนรู้สึกว่าน่ากลัวมากๆ ฮาๆ


        แต่ก็ไม่ได้หมายความว่าทุกแอพฯจะต้องลักลอบเสมอไป อย่างเช่น Facebook Messenger หรือ Google Hangout ถ้าถูกตรวจสอบแล้วโดนจับได้ก็จะเป็นการเสียชื่อเสียงโดยเปล่าประโยชน์ โดยส่วนใหญ่ก็จะมีคนที่คอยตรวจสอบการทำงานอยู่แล้วว่าแอพฯชื่อดังตัวไหนทำอะไรแปลกๆหรือป่าว (เช่นมือถือยี่ห้อดังที่โดนตรวจพบว่ามีการส่งข้อมูลบางอย่างของผู้ใช้กลับไปที่เซิฟเวอร์เป็นระยะๆ)

       ถ้าจะระวังเรื่องพวกนี้ เจ้าของบล็อกว่าควรระวังพวกแอพฯเถื่อนที่ Patched แล้ว Mod แล้ว หรือการดาวน์โหลดจาก Store หรือ Market ที่อื่นๆที่ไม่น่าเชื่อถือดีกว่า อันนั้นอันตรายกว่าเยอะ เพราะ User ไม่สามารถรู้ได้เลยว่าคนที่เอาไปแก้ไขได้แอบใส่อะไรไว้บ้าง อย่างล่าสุดเห็นนิยมกันก็คือแอพ Line ที่เอามา Mod จนลงสองสามตัวได้พร้อมๆกันเพื่อใช้หลายไอดีได้ในเครื่องเดียวกัน



        ดังนั้นก็ขอให้ระวังมากกว่าระแวงกันนะครับ ใช้เหตุใช้ผลในการสงสัย ตั้งคำถามแล้วหาทางตรวจสอบได้ก็จะยิ่งดีไปใหญ่ 

        ซึ่งความรู้บางอย่าง บางคนก็บอกว่าไร้สาระ จะรู้ไปทำไม 

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




เหล่าพันธมิตรแอนดรอยด์

Devahoy Layer Net NuuNeoI The Cheese Factory Somkiat CC Mart Routine Artit-K Arnondora Kamonway Try to be android developer Oatrice Benz Nest Studios Kotchaphan@Medium Jirawatee@Medium Travispea@Medium