1. # ปฏิบัติต่อข้อมูลที่เข้ามาทั้งหมดเป็นสตริงและเพิ่มคำพูดสองครั้งลงในข้อมูลขาเข้าโดยอัตโนมัติ ตัวอย่างเช่น: สั่งซื้อโดย #user_id #หากค่าที่ส่งผ่านคือ 111 จากนั้นค่าเมื่อการแยกวิเคราะห์เป็น SQL เป็นคำสั่งซื้อโดย "111" หากค่าที่ส่งผ่านคือ ID การแยกวิเคราะห์เป็น SQL จะเป็นคำสั่งซื้อโดย "ID"
2. $ แสดงข้อมูลที่ผ่านโดยตรงและสร้างใน SQL ตัวอย่างเช่น: สั่งซื้อโดย $ user_id $ หากค่าที่ส่งผ่านคือ 111 จากนั้นค่าเมื่อแยกวิเคราะห์ลงใน SQL เป็นคำสั่งซื้อโดย user_id หากค่าที่ส่งผ่านคือ ID การแยกวิเคราะห์เป็น SQL จะเป็นคำสั่งซื้อตาม ID
3. วิธี # สามารถป้องกันการฉีด SQL ได้อย่างมาก
4. วิธี $ ไม่สามารถป้องกันการฉีด SQL
5. โดยทั่วไปวิธี $ จะใช้ในการส่งผ่านในวัตถุฐานข้อมูลเช่นการส่งผ่านในชื่อตาราง
6. โดยทั่วไปถ้าคุณสามารถใช้ #อย่าใช้ $
เมื่อใช้คำสั่งซื้อโดยพารามิเตอร์แบบไดนามิกเมื่อเรียงลำดับ mybatis คุณต้องให้ความสนใจกับการใช้ $ แทน #
เปลี่ยนสตริง
โดยค่าเริ่มต้นการใช้ไวยากรณ์รูปแบบ #{} ทำให้ MyBatis สร้างคุณสมบัติคำสั่งที่ประมวลผลล่วงหน้าและตั้งค่าความปลอดภัยด้วยเป็นพื้นหลัง (เช่น?) สิ่งนี้ปลอดภัยและรวดเร็วและบางครั้งคุณก็ต้องการแทรกสตริงที่ไม่เปลี่ยนเป็นคำสั่ง SQL โดยตรง ตัวอย่างเช่นการสั่งซื้อโดยคุณสามารถใช้เช่นนี้: สั่งซื้อโดย $ {columnName}
ที่นี่ mybatis จะไม่แก้ไขหรือหลบหนีสตริง
สำคัญ: ไม่ปลอดภัยที่จะรับเอาต์พุตเนื้อหาจากผู้ใช้และมอบให้กับสตริงที่ไม่เปลี่ยนแปลงในคำสั่ง สิ่งนี้สามารถนำไปสู่การโจมตีการฉีด SQL ที่มีศักยภาพดังนั้นคุณไม่ควรอนุญาตให้ผู้ใช้เข้าสู่ฟิลด์เหล่านี้หรือมักจะหลบหนีและตรวจสอบด้วยตัวเอง
ข้างต้นคือการอภิปรายสั้น ๆ เกี่ยวกับความแตกต่างระหว่าง # และ $ ใน mybatis ฉันหวังว่าทุกคนจะสนับสนุน wulin.com ~