การตรวจสอบความถูกต้องของรูปแบบ HTML5 (หรือที่เกี่ยวข้อง) สำหรับการตรวจสอบฝั่งไคลเอ็นต์หรือไม่

msanford 09/19/2017. 5 answers, 5.717 views
web-application javascript html-5 data-validation

คุณลักษณะที่น่าสนใจของ HTML5 คือ แอตทริบิวต์ ซึ่งทำให้เบราว์เซอร์สามารถตรวจสอบค่าของฟิลด์อินพุตได้จากนิพจน์ทั่วไปที่นักพัฒนาซอฟต์แวร์ให้ไว้

ต่อจากนี้จะผูกกับฟิลด์ ValidityState ซึ่งสามารถสอบถามข้อมูล UX เพื่อป้องกันการส่งที่ไม่ถูกต้องเป็นต้น

เซิร์ฟเวอร์จะใช้การตรวจสอบสภาพก่อนวัยอันควร (เช่นเดียวกับ XSRF)

นี่ คือรูปแบบการตรวจสอบความถูกต้องของฝั่งไคลเอ็นต์ที่สมบูรณ์และเพียงพอ หรือด้วยเหตุใดก็ตามที่ยังคงเป็นที่น่าพอใจที่จะตัดถอนแบบฟอร์มทั้งหมดและต้องตรวจสอบความถูกต้องต่อเขตข้อมูลแบบเดิมก่อนส่ง?

4 Comments
5 Adriano Repetti 09/19/2017
"... นี่คือรูปแบบการตรวจสอบฝั่งไคลเอ็นต์ที่สมบูรณ์และเพียงพอ ... " ระบุว่านี่ไม่ใช่เรื่องเกี่ยวกับความปลอดภัย แต่เป็นการเขียนโปรแกรม (ดูคำตอบ) ... ถ้าการตรวจสอบ HTML5 มีทุกสิ่งที่คุณต้องการใช่แล้ว แน่นอนถ้าเบราว์เซอร์ที่คุณต้องเข้ากันได้กับคุณสมบัติที่จำเป็นต้องสนับสนุน ...
msanford 09/19/2017
@AdrianoRepetti แท้จริงแล้วมีข้อกังวลที่ชัดเจนจากมุมมองทั้งจากประสบการณ์และด้านการพัฒนา (การบำรุงรักษาหลัก) เป้าหมายของฉันในการถามนี่คือการทดสอบเหตุผลพื้นฐานของฉันซึ่งสอดคล้องกับชุมชนนี้อย่างมีความสุข (คุณไม่ต้องสงสัยเลยว่ามีสถานที่ที่จะทำสิ่งโง่ ๆ เช่นป้องกันการวางรหัสผ่านในฟิลด์รหัสผ่าน "เพื่อความปลอดภัย" เช่นเดียวกับการตรวจสอบรอบที่สอง
Adriano Repetti 09/19/2017
@ ms ใช่ฉันไม่ได้หมายความว่าคำถามเป็นเรื่องนอก แต่ที่เกี่ยวกับการรักษาความปลอดภัยที่คุณมีอยู่แล้วมีคำตอบและ 2 เซ็นต์ของฉันสำหรับ "ผู้ใหญ่และเพียงพอ" ส่วนหนึ่งของการตรวจสอบ HTML5
1 Ryan 09/19/2017
ใช่มันเพียงพอสำหรับประสบการณ์ของผู้ใช้ไม่ไม่เพียงพอสำหรับประสบการณ์การรักษาความปลอดภัย

5 Answers


Anders 09/19/2017.

จากมุมมองด้านความปลอดภัยคุณต้องตรวจสอบทุกอย่างบนเซิร์ฟเวอร์ใหม่ นี่เป็นกรณี ๆ เสมอไม่ว่าจะเป็น HTML5 ที่สวยและทันสมัยก็ตาม คุณไม่สามารถไว้ใจลูกค้าได้ คุณไม่มีความคิดว่าจะปฏิบัติตามกฎของ HTML5 หรือไม่ คุณไม่รู้ด้วยซ้ำว่าเป็นเบราเซอร์หรือไม่

ดังนั้นคุณควรตรวจสอบแบบฟอร์มทั้งหมดกับฝั่งไคลเอ็นต์ JS ของคุณก่อนที่จะส่งแม้ว่าคุณจะใช้คุณลักษณะ HTML5 หรือไม่? จากมุมมองด้านความปลอดภัยมันไม่สำคัญ การตรวจสอบฝั่งไคลเอ็นต์มีค่าความปลอดภัยเป็นศูนย์อยู่แล้ว - ดูด้านบน - ดังนั้นจากมุมมองด้านความปลอดภัยคุณอาจไม่จำเป็นต้องทำอย่างนั้นด้วย

การตรวจสอบฝั่งไคลเอ็นต์เป็นเรื่องเกี่ยวกับประสบการณ์ของผู้ใช้อย่างหมดจด ถ้าการตรวจสอบความถูกต้องของ JS ของคุณเองหรือ HTML5 ที่มีอยู่ภายในทำให้ UX ที่ดีที่สุดเป็นคำถามที่น่าสนใจ แต่ไม่ใช่หัวข้อที่นี่

1 comments
1 Rory Alsop♦ 09/21/2017
ความคิดเห็นไม่ได้สำหรับการอภิปรายขยาย; การสนทนานี้ถูก ย้ายไปที่แชท แล้ว

Andy 09/21/2017.

คำอธิบายด้วยรหัสและภาพหน้าจอ

คำตอบที่ได้รับเป็นสิ่งที่ดี แต่ผมอยากจะอธิบายเรื่องนี้ด้วยโค้ด / หน้าจอ

บรรทัดด้านล่างคือฝั่งไคลเอ็นต์ที่สามารถจัดการได้ (ปิดใช้งาน / ลบล้างหรือข้ามหรือแก้ไข) โดยผู้ใช้ปลายทาง ดังนั้นการตรวจสอบด้านไคลเอ็นต์แบบใดแบบหนึ่งจึงไม่มีประโยชน์อย่างสิ้นเชิงจากมุมมองด้านความปลอดภัย คุณต้องตรวจสอบด้านเซิร์ฟเวอร์ทุกครั้งเสมอ

สมมติว่าคุณมีแบบ HTML เช่นนี้:

นี่คือการขอที่อยู่อีเมล ( type="email" ) กล่าวว่าเป็นฟิลด์ที่ required (แอตทริบิวต์ที่ required )

ถ้าฉันพยายามส่งข้อมูลที่ว่างหรือไม่ใช้ที่อยู่อีเมลข้อผิดพลาดเช่น

ใส่คำอธิบายภาพที่นี่

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

สมมติว่าฉันเปลี่ยนมาร์กอัพของฟอร์มนี้:

ตอนนี้ฉันพูดว่าฟิลด์ emailAddress เป็น text ประเภท (เช่นไม่ใช่ email ) และไม่ใช่ฟิลด์ที่ต้องระบุ (แอตทริบิวต์ที่ required ลบ)

ดังนั้นฉันสามารถส่งข้อมูลนี้ไปยังเซิร์ฟเวอร์ได้ สตริงข้อความ "andy" ไม่ใช่ที่อยู่อีเมลที่ถูกต้อง แต่เนื่องจากเราไม่มีการตรวจสอบด้านเซิร์ฟเวอร์ (ยัง) มันค่อนข้างจะมีความสุขจะโพสต์ไปยังเซิร์ฟเวอร์แล้วถ้ารหัส PHP ใช้ $_POST['emailAddress'] จะมี "andy" เป็นข้อมูลของ

ใส่คำอธิบายภาพที่นี่

ฉันยังสามารถส่งแบบฟอร์มได้โดยไม่มีข้อมูลใด ๆ ซึ่งในกรณีนี้แอ็พพลิเคชัน - โดยที่ไม่มีการตรวจสอบความถูกต้องด้านเซิร์ฟเวอร์ - จะมีสตริงว่างในตัวแปร $_POST['emailAddress']

นี่เป็นไปได้เนื่องจากฉันเป็นผู้ใช้ปลายทางสามารถจัดการรหัสฝั่งไคลเอ็นต์ได้

Why is server side validation secure? ผู้ใช้ปลายทางไม่สามารถจัดการรหัสฝั่งเซิร์ฟเวอร์ (เว้นแต่ว่าเซิร์ฟเวอร์ถูกบุกรุก แต่นั่นเป็นปัญหาที่แยกต่างหากและไม่ใช่สิ่งที่ง่ายเหมือนกับการจัดการ HTML สำหรับคนทั่วไป)

ดังนั้นใน PHP ฉันสามารถทำเช็คเช่นนี้

if (!filter_var($_POST['emailAddress'], FILTER_VALIDATE_EMAIL)) {
    die('Invalid email address');
} 

แม้ว่าจะเป็นวิธีจัดการข้อผิดพลาดที่ไม่เป็นมิตร แต่จะเป็นการหยุดการทำงานของสคริปต์หากผู้ใช้ส่ง "andy" แทนที่อยู่อีเมลที่ถูกต้อง แอ็พพลิเคชันจะไม่ใช้ "andy" เป็นตัวแปรที่คาดว่าจะมีที่อยู่อีเมลเนื่องจากผู้ใช้ไม่สามารถจัดการโค้ด PHP ข้างต้นได้มีโอกาสน้อยที่จะสามารถข้ามการตรวจสอบได้ นี่คือการตรวจสอบฝั่งเซิร์ฟเวอร์ - ผู้ใช้ปลายทางไม่สามารถเปลี่ยนแปลงได้ (อย่างง่ายดาย) เนื่องจากไม่ได้อยู่ในการควบคุมเพื่อเปลี่ยนแปลง

ทำไมต้องกังวลกับการตรวจสอบความถูกต้องของลูกค้าด้วย? การตรวจสอบฝั่งไคลเอ็นต์จะเป็นประโยชน์สำหรับการปรับปรุงส่วนติดต่อผู้ใช้ "ดูดี" หรือตัวอย่างเช่นข้อความแสดงข้อผิดพลาด / การปิดใช้งานฟอร์ม ตัวอย่างเช่นเป็นคุณลักษณะ UI ที่มีลักษณะที่ดีที่จะมีข้อความในหน้าจอแรกในกรณีที่ผู้ใช้พิมพ์ที่อยู่อีเมลผิดพลาด แบบฟอร์มจะไม่ได้ส่งภายใต้ชุดแรกของเงื่อนไขซึ่งช่วยลดข้อมูลที่ไม่จำเป็นที่จะถูกส่งไปยังเซิร์ฟเวอร์ แต่ในที่สุดสิ่งที่ลูกค้าทำด้านข้างจะสามารถเปลี่ยนแปลงได้โดยผู้ใช้ปลายทาง ดังนั้นคุณจึงไม่ควรคิดถึง "การตรวจสอบฝั่งไคลเอ็นต์" เมื่อกล่าวถึงแนวทางปฏิบัติด้านความปลอดภัย การตรวจสอบฝั่งไคลเอ็นต์ส่วนใหญ่เป็นการปรับปรุงส่วนติดต่อผู้ใช้เท่านั้น

การตรวจสอบฝั่งไคลเอ็นต์ยังมีประโยชน์สำหรับแอ็พพลิเคชันฝั่งไคลเอ็นต์ (เมื่อไม่มีการร้องขอ / โพสต์ลงในเซิร์ฟเวอร์) ตัวอย่างเช่นถ้าคุณมีแบบฟอร์มที่ให้ไว้ด้านบนและแสดงเนื้อหาของ emailAddress ใน

ในหน้าเว็บโดยการอ่านด้วย JavaScript / jquery หากผู้ใช้ป้อนข้อมูลบางอย่างเช่น และไม่มีการตรวจสอบความถูกต้องก็จะเป็นการแจ้งเตือนเมื่อ JavaScript พยายามที่จะเขียนค่าลงในฟิลด์
ไม่มีอะไรจะถูกโพสต์ไปยังเซิร์ฟเวอร์ในกรณีนี้ - ทั้งหมดเกิดขึ้นฝั่งไคลเอ็นต์ - ดังนั้นการตรวจสอบฝั่งไคลเอ็นต์อีกครั้งจะเป็นประโยชน์ในสถานการณ์สมมติประเภทนี้ อย่างไรก็ตามเหตุผลเดียวกันกับที่ผู้ใช้ยังคงสามารถปิดใช้งานการตรวจสอบได้ ผลกระทบที่นี่ลดลงเพราะถ้าพวกเขาเรียกใช้รหัสข้างต้นจะเกิดขึ้นเฉพาะในเครื่องท้องถิ่นเท่านั้นไม่ใช่กับผู้ใช้แอพพลิเคชันรายอื่น ตัวอย่างเช่น:

ใส่คำอธิบายภาพที่นี่

ใช้รหัสต่อไปนี้ (ไม่มีการตรวจสอบความถูกต้อง):

และ jquery เพื่อเขียนเนื้อหาแบบฟอร์มไปยัง

ด้วยการ test ID:

$(document).ready(function() {
    $("button").click(function(e) {
        e.preventDefault();

        $("#test").html($("#emailAddress").val());
    });
}); 

Bristran 09/19/2017.

ดังที่ Anders กล่าวการตรวจสอบฝั่งไคลเอ็นต์ไม่เกี่ยวข้องกับความปลอดภัยของแอพพลิเคชัน แต่สำคัญมากจากจุด UX

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

tl; dr - ไม่มีสิ่งใดที่เหมือนกับการตรวจสอบฝั่งไคลเอ็นต์ที่เพียงพอเพียงไม่เชื่อถือไคลเอ็นต์เพียงแค่ปฏิบัติกับทุกอย่างที่ได้รับบนเซิร์ฟเวอร์ก่อนประมวลผล


AnoE 09/21/2017.

ไม่มีคำตอบใดที่จะกล่าวถึงจริงๆดังนั้นให้ฉันเพิ่มข้อมูลนี้:

เหตุผลที่ anything ใน HTML ของคุณไม่มีความเกี่ยวข้องกับการรักษาความปลอดภัยคือผู้โจมตีสามารถสร้างคำขอได้โดยไม่ต้องโหลด HTML ในเบราว์เซอร์ (โดยพิมพ์คำขอในคอนโซลหรือใช้ปลั๊กอินบางตัว) จริงๆแล้วไม่แม้แต่จะเริ่มต้นเบราว์เซอร์ของคุณ (c / f curl , wget หรือภาษาเขียนโปรแกรม)

ส่วนที่เกี่ยวข้องสำหรับสิ่งเหล่านี้คือคำขอ HTTP ไม่ใช่ HTML payload และยกเว้นชั้น TLS / SSL ไม่มีอะไรที่จะป้องกันเนื้อหาคำขอ HTTP จากบุคคลที่ creating คำขอจริงๆ

ดังนั้นการรักษาความปลอดภัยใด ๆ และทั้งหมดต้องเกิดขึ้นที่ฝั่งเซิร์ฟเวอร์ การตรวจสอบฝั่งไคลเอ็นต์มีเพียงเพื่อประสบการณ์การใช้งานที่ดีขึ้น (ข้ามไปกลับ)


Harshit Singhal 09/21/2017.

การตรวจสอบ HTML จะใช้เฉพาะสำหรับผู้ที่ไม่ทราบวิธีเปลี่ยนโค้ด html จากฝั่งไคลเอ็นต์ การตรวจสอบ html เหล่านี้สามารถถูกลบออกและจัดการจากฝั่งไคลเอ็นต์ได้อย่างถูกต้องมีการตรวจสอบความถูกต้องใน db ของคุณเสมอ

1 comments
1 Michael Kjörling 09/22/2017
ไม่มีเหตุผลที่การตรวจสอบความถูกต้องเกิดขึ้นในฐานข้อมูล เหตุผลที่จะเกิดขึ้นฝั่งเซิร์ฟเวอร์

HighResolutionMusic.com - Download Hi-Res Songs

1 (G)I-DLE

POP/STARS flac

(G)I-DLE. 2018. Writer: Riot Music Team;Harloe.
2 Ariana Grande

​Thank U, Next flac

Ariana Grande. 2018. Writer: Crazy Mike;Scootie;Victoria Monét;Tayla Parx;TBHits;Ariana Grande.
3 Imagine Dragons

Bad Liar flac

Imagine Dragons. 2018. Writer: Jorgen Odegard;Daniel Platzman;Ben McKee;Wayne Sermon;Aja Volkman;Dan Reynolds.
4 Backstreet Boys

Chances flac

Backstreet Boys. 2018.
5 Clean Bandit

Baby flac

Clean Bandit. 2018. Writer: Jack Patterson;Kamille;Jason Evigan;Matthew Knott;Marina;Luis Fonsi.
6 BTS

Waste It On Me flac

BTS. 2018. Writer: Steve Aoki;Jeff Halavacs;Ryan Ogren;Michael Gazzo;Nate Cyphert;Sean Foreman;RM.
7 BlackPink

Kiss And Make Up flac

BlackPink. 2018. Writer: Soke;Kny Factory;Billboard;Chelcee Grimes;Teddy Park;Marc Vincent;Dua Lipa.
8 Lady Gaga

I'll Never Love Again flac

Lady Gaga. 2018. Writer: Benjamin Rice;Lady Gaga.
9 Kelly Clarkson

Never Enough flac

Kelly Clarkson. 2018. Writer: Benj Pasek;Justin Paul.
10 Fitz And The Tantrums

HandClap flac

Fitz And The Tantrums. 2017. Writer: Fitz And The Tantrums;Eric Frederic;Sam Hollander.
11 Little Mix

Told You So flac

Little Mix. 2018. Writer: Eyelar;MNEK;Raye.
12 Halsey

Without Me flac

Halsey. 2018. Writer: Halsey;Delacey;Louis Bell;Amy Allen;Justin Timberlake;Timbaland;Scott Storch.
13 Cher Lloyd

None Of My Business flac

Cher Lloyd. 2018. Writer: ​iamBADDLUCK;Alexsej Vlasenko;Kate Morgan;Henrik Meinke;Jonas Kalisch;Jeremy Chacon.
14 Bradley Cooper

Always Remember Us This Way flac

Bradley Cooper. 2018. Writer: Lady Gaga;Dave Cobb.
15 Calum Scott

No Matter What flac

Calum Scott. 2018. Writer: Toby Gad;Calum Scott.
16 Ashley Tisdale

Voices In My Head flac

Ashley Tisdale. 2018. Writer: John Feldmann;Ashley Tisdale.
17 Imagine Dragons

Machine flac

Imagine Dragons. 2018. Writer: Wayne Sermon;Daniel Platzman;Dan Reynolds;Ben McKee;Alex Da Kid.
18 Diplo

Close To Me flac

Diplo. 2018. Writer: Ellie Goulding;Savan Kotecha;Peter Svensson;Ilya;Swae Lee;Diplo.
19 Billie Eilish

When The Party's Over flac

Billie Eilish. 2018. Writer: Billie Eilish;FINNEAS.
20 Little Mix

Woman Like Me flac

Little Mix. 2018. Writer: Nicki Minaj;Steve Mac;Ed Sheeran;Jess Glynne.

Related questions

Hot questions

Language

Popular Tags