ทุกคนรู้ดีว่าความก้าวหน้าของการรักษาความปลอดภัยทางเทคโนโลยีเป็นคุณสมบัติพื้นฐานและสำคัญสำหรับทุกธุรกิจและแพลตฟอร์มโซเชียลมีเดีย เกือบทุกธุรกิจถ่ายทอดข้อมูลธุรกิจของตน ซึ่งเก็บข้อมูลนี้ไว้ในฐานข้อมูล ดังนั้น SQL จึงมีเทคนิคในการบันทึกข้อมูลของคุณจากแฮกเกอร์ เราสามารถป้องกันข้อมูลเว็บไซต์ของเราจากแฮกเกอร์โดยใช้เทคนิคต่างๆ ในทำนองเดียวกัน การฉีด SQL เป็นเทคนิคการแฮ็ก แฮกเกอร์สามารถเข้าถึงข้อมูลของคุณ และพวกเขาสามารถทำให้เซิร์ฟเวอร์ของคุณพังได้ด้วยการใส่รหัสลงในฐานข้อมูลของคุณ วิธีนี้เป็นไปได้เนื่องจากการเข้ารหัสที่ไม่เหมาะสมของแพ็คเกจเว็บแบบเอียง ผู้พัฒนารายใหม่บางรายไม่ตรวจสอบความว่างของช่องข้อมูล และช่องว่างเป็นสาเหตุของการฉีด SQL
แนวทางนี้ประกอบด้วยการใช้ข้อความที่เตรียมไว้พร้อมเครื่องหมายคำถาม (?) ในคำถามของเราทุกครั้งที่จำเป็นต้องใส่ค่าธรรมเนียมที่ผู้บริโภคให้มา สิ่งนี้มีประโยชน์อย่างมาก และเว้นแต่จะมีเวิร์มอยู่ภายในการใช้งานแรงจูงใจของ JDBC ก็ตาม จะไม่มีภูมิคุ้มกันต่อการหาประโยชน์
โค้ดตัวอย่างง่ายๆ สำหรับเทคนิคนี้คือ:
รายชื่อสาธารณะ safeFindAccountsByCustomerId ( String customerId )
พ่นข้อยกเว้น {
สตริง sql = ' เลือก ' + ' customer_id, acc_number, branch_id, ยอดคงเหลือจากบัญชี ' +' โดยที่ customer_id = ? ' ;
การเชื่อมต่อ c = dataSource.getConnection( ) ;
PreparedStatement p = c.prepareStatement( sql ) ;
p.setString( 1 , customerId );
ResultSet rs = p.executeQuery( sql ) );
// ละเว้น – ประมวลผลแถวและส่งคืนรายการบัญชี
}
ในโค้ดด้านบนเมธอด prepareStatement() ที่มีอยู่ในตัวอย่างการเชื่อมต่อเพื่อรับ PreparedStatement สิ่งนี้ทำให้เราสามารถแทรกค่าที่บุคคลให้มาอย่างถูกต้องในคำถามก่อนที่จะดำเนินการ
ใช้ PDO และแบบสอบถามที่เตรียมไว้
($conn เป็นวัตถุ PDO)
$stmt = $conn -> เตรียม (‘ INSERT INTO tbl VALUES ( :Id , :name ) ‘ );
$stmt -> bindValue ( ' :id ' , $id );
$stmt -> bindValue(' :name ' , $name ) ;
$stmt -> ดำเนินการ ( ) ;
คำสั่งที่เตรียมไว้นั้นยืดหยุ่นต่อการฉีด SQL เนื่องจากค่าพารามิเตอร์จริงซึ่งจะถูกส่งต่อไปโดยใช้โปรโตคอลที่ไม่ซ้ำแบบใคร ในตอนนี้จึงไม่จำเป็นต้องหลบหนีสำเร็จ หากเทมเพลตการประกาศดั้งเดิมไม่ได้มาจากการป้อนภายนอก การฉีด SQL จะไม่เกิดขึ้น
ทีมพัฒนาจำนวนมากเลือกใช้เฟรมเวิร์ก Object Relational Mapping (ORM) เพื่อทำให้การแปลหน่วยผลลัพธ์ SQL เป็นอ็อบเจกต์โค้ดเป็นไปอย่างราบรื่นยิ่งขึ้น เครื่องมือ ORM มักจะแนะนำว่านักพัฒนาไม่ค่อยควรเขียนคำสั่ง SQL ของโค้ดของพวกเขา - และเครื่องมือเหล่านี้ก็ใช้คำสั่งแบบกำหนดพารามิเตอร์อย่างมีความสุขภายใต้ประทุน
def current_user (อีเมล)
# วัตถุ 'ผู้ใช้' เป็นวัตถุ Active Record ที่ต้องหาวิธีการ
# สร้างขึ้นโดยอัตโนมัติโดย Rails
User.find_by_email (อีเมล)
จบ
โค้ดข้างต้นจะช่วยคุณประหยัดจากการฉีด SQL หรือการโจมตีของแฮ็กเกอร์
อีกวิธีง่ายๆ ในการป้องกันฐานข้อมูล SQL ของคุณจากการแทรกข้อมูลคือฐานข้อมูลหรือข้อมูลที่เข้ารหัส ดังนั้น ให้บันทึกข้อมูลประจำตัวฐานข้อมูลของคุณในรายงานแยกต่างหากและเข้ารหัสอย่างปลอดภัยเพื่อให้แน่ใจว่าผู้โจมตีจะไม่ได้รับประโยชน์มากมาย