ยินดีต้อนรับสู่การสอนการสแกนรหัส Java! บทช่วยสอนนี้จะนำคุณผ่านวิธีการตั้งค่า GitHub Advanced Security: การสแกนรหัสรวมถึงการตีความผลลัพธ์ที่อาจพบได้ ที่เก็บต่อไปนี้มีช่องโหว่การฉีด SQL เพื่อการสาธิต
การสแกนรหัสเป็นคุณสมบัติที่คุณใช้ในการวิเคราะห์รหัสในที่เก็บ GitHub เพื่อค้นหาช่องโหว่ด้านความปลอดภัยและข้อผิดพลาดในการเข้ารหัส ปัญหาใด ๆ ที่ระบุโดยการวิเคราะห์จะแสดงใน GitHub
คุณสามารถใช้การสแกนรหัสด้วย CodeQL ซึ่งเป็นเครื่องมือวิเคราะห์รหัสความหมาย CodeQL ถือว่ารหัสเป็นข้อมูลช่วยให้คุณสามารถค้นหาช่องโหว่ที่อาจเกิดขึ้นในรหัสของคุณด้วยความมั่นใจมากกว่าเครื่องวิเคราะห์แบบคงที่แบบดั้งเดิม
บทช่วยสอนนี้พร้อมการวิเคราะห์ CodeQL ด้วยการสแกนรหัสเพื่อค้นหาช่องโหว่ภายในรหัสของคุณ
เริ่มต้นด้วยการสร้างที่เก็บใหม่จากส้อม (สาธารณะ) หรือโคลนที่เก็บ

ในกรณีที่สร้างที่เก็บที่เก็บไว้ให้แน่ใจว่าได้
คลิกที่แท็บ Security

คลิก Set up code scanning

คลิก Setup this workflow โดยการวิเคราะห์ codeql

สิ่งนี้จะสร้างไฟล์เวิร์กโฟลว์การกระทำของ GitHub ด้วยการตั้งค่า CodeQL แล้ว เนื่องจาก Java เป็นภาษาที่รวบรวมคุณจะต้องตั้งค่าการสร้างในขั้นตอนต่อไป ดูเอกสารประกอบหากคุณต้องการกำหนดค่าการวิเคราะห์ CodeQL ด้วยระบบ CI ของบุคคลที่สามแทนที่จะใช้การกระทำของ GitHub
ไฟล์เวิร์กโฟลว์การกระทำมีจำนวนส่วนต่าง ๆ รวมถึง:

คลิก Start Commit -> Commit this file เพื่อกระทำการเปลี่ยนแปลงสาขา หลัก
มีหลายเหตุการณ์ที่สามารถกระตุ้นเวิร์กโฟลว์การกระทำของ GitHub ในตัวอย่างนี้เวิร์กโฟลว์จะถูกเรียกใช้

การตั้งค่าเวิร์กโฟลว์ CodeQL ใหม่และส่งมอบให้กับสาขา หลัก ในขั้นตอนข้างต้นจะทำให้เกิดการสแกน
คลิกแท็บ Actions -> CodeQL
คลิกที่เวิร์กโฟลว์เฉพาะรัน คุณสามารถดูความคืบหน้าของเวิร์กโฟลว์ทำงานจนกว่าการวิเคราะห์จะเสร็จสิ้น

เมื่อเวิร์กโฟลว์เสร็จสิ้นให้คลิกแท็บ Security -> Code Scanning Alerts ควรมองเห็นการแจ้งเตือนความปลอดภัย "แบบสอบถามที่สร้างขึ้นจากแหล่งควบคุมที่ผู้ใช้"
การคลิกที่การแจ้งเตือนความปลอดภัยจะให้รายละเอียดเกี่ยวกับการแจ้งเตือนความปลอดภัยรวมถึง:

คลิก Show more เพื่อดูการลดการแจ้งเตือนอย่างเต็มรูปแบบรวมถึงตัวอย่างและลิงก์ไปยังข้อมูลเพิ่มเติม


การวิเคราะห์ CodeQL สามารถติดตามเส้นทาง DataFlow จากแหล่งที่มาเพื่อจมและให้ความสามารถในการดูเส้นทางการเดินทางข้ามภายในการแจ้งเตือน
คลิก show paths เพื่อดูเส้นทาง dataflow ที่ส่งผลให้เกิดการแจ้งเตือนนี้


เพื่อแก้ไขการแจ้งเตือนเฉพาะนี้เราจะต้องตรวจสอบให้แน่ใจว่าพารามิเตอร์ที่ใช้ในการสืบค้น SQL ได้รับการตรวจสอบและถูกสุขลักษณะ
คลิกที่แท็บ Code และแก้ไขไฟล์ IndexController.java ในโฟลเดอร์ Controllers แทนที่เนื้อหาด้วยไฟล์ fixme

คลิก Create a new branch for this commit and start a pull request ตั้งชื่อ fix-sql-injection Branch Branch และสร้างคำขอดึง
ในคำขอดึงคุณจะสังเกตเห็นว่าการวิเคราะห์ CodeQL ได้เริ่มต้นเป็นการตรวจสอบสถานะ รอจนกว่าจะเสร็จสิ้น

หลังจากเวิร์กโฟลว์เสร็จสิ้นให้คลิกที่ Details โดยการ Code Scanning Results / CodeQL

ขอให้สังเกตว่าการสแกนรหัสได้ตรวจพบว่าคำขอดึงนี้จะแก้ไขช่องโหว่การฉีด SQL ที่ตรวจพบมาก่อน

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

คลิกที่การแจ้งเตือนความปลอดภัยและสังเกตว่ารายละเอียดเมื่อมีการแก้ไขโดยผู้ที่และการกระทำที่เฉพาะเจาะจง สิ่งนี้ให้การตรวจสอบย้อนกลับอย่างเต็มรายละเอียดเมื่อใดและวิธีการแจ้งเตือนความปลอดภัยได้รับการแก้ไขและสิ่งที่เปลี่ยนไปเพื่อแก้ไขปัญหา

ตอนนี้เรามีการตั้งค่าการวิเคราะห์ CodeQL และมีการแก้ไขการแจ้งเตือนความปลอดภัยเราสามารถพยายามแนะนำการแจ้งเตือนในคำขอดึง
สร้างคำขอดึงใหม่ด้วยสาขาฐานเป็นสาขา main ของคุณและสาขาเปรียบเทียบเป็นสาขา new-feature

ตรวจสอบให้แน่ใจว่าสาขาฐานถูกตั้งค่าเป็นสาขา main ของคุณเองเมื่อเทียบกับสาขา main ของที่เก็บต้นฉบับ
เมื่อมีการสร้างคำขอดึงแล้วคุณจะสังเกตเห็นว่าการวิเคราะห์ CODEQL เริ่มต้นจากการตรวจสอบสถานะ รอจนกว่าจะเสร็จสิ้น
หลังจากเวิร์กโฟลว์เสร็จสิ้น Code Scanning Results / CodeQL จะล้มเหลว ขอให้สังเกตว่าการสแกนรหัสได้ตรวจพบว่าคำขอดึงนี้แนะนำการแจ้งเตือนความปลอดภัยใหม่

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

นอกจากนี้ยังช่วยให้การทำงานร่วมกันระหว่างนักพัฒนาและทีมรักษาความปลอดภัยสามารถหารือเกี่ยวกับการแจ้งเตือนความปลอดภัยและวิธีการแก้ไข

คลิกที่ Show more details โดย Code Scanning Alert ใหม่เพื่อข้ามไปที่แท็บ Security และดูรายละเอียดการแจ้งเตือนความปลอดภัย

ขอให้สังเกตว่าพบการแจ้งเตือนความปลอดภัย In pull request และไม่ได้อยู่ในสาขา main (การผลิต)
พร้อมที่จะพูดคุยเกี่ยวกับคุณสมบัติการรักษาความปลอดภัยขั้นสูงสำหรับ GitHub Enterprise หรือไม่? ติดต่อฝ่ายขายสำหรับข้อมูลเพิ่มเติม!
ตรวจสอบหน้าคุณสมบัติความปลอดภัยของ GitHub สำหรับคุณสมบัติความปลอดภัยเพิ่มเติมที่ฝังอยู่ใน GitHub
ตรวจสอบเอกสารการสแกนรหัสสำหรับตัวเลือกการกำหนดค่าเพิ่มเติมและรายละเอียดทางเทคนิค