Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

seberapa amankah pernyataan yang disiapkan PDO?

Sebenarnya, sebenarnya tidak diperlukan pelolosan, karena nilai parameter tidak pernah diinterpolasi ke dalam string kueri.

Cara kerja parameter kueri adalah kueri dikirim ke server database saat Anda memanggil prepare() , dan nilai parameter dikirim nanti, saat Anda memanggil execute() . Jadi mereka disimpan terpisah dari bentuk tekstual dari kueri. Tidak pernah ada kesempatan untuk injeksi SQL (disediakan PDO::ATTR_EMULATE_PREPARES salah).

Jadi ya, parameter kueri membantu Anda menghindari bentuk kerentanan keamanan tersebut.

Apakah mereka 100% bukti terhadap kerentanan keamanan apa pun? Tidak, tentu saja tidak. Seperti yang Anda ketahui, parameter kueri hanya menggantikan nilai literal tunggal dalam ekspresi SQL. Anda tidak dapat membuat satu parameter pengganti untuk daftar nilai, misalnya:

SELECT * FROM blog WHERE userid IN ( ? );

Anda tidak dapat menggunakan parameter untuk membuat nama tabel atau nama kolom menjadi dinamis:

SELECT * FROM blog ORDER BY ?;

Anda tidak dapat menggunakan parameter untuk jenis sintaks SQL lainnya:

SELECT EXTRACT( ? FROM datetime_column) AS variable_datetime_element FROM blog;

Jadi ada beberapa kasus di mana Anda harus memanipulasi kueri sebagai string, sebelum prepare() panggilan. Dalam kasus ini, Anda masih perlu menulis kode dengan hati-hati untuk menghindari injeksi SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL vs MongoDB

  2. Apakah ada SQLite yang setara dengan DESCRIBE [tabel] MySQL?

  3. Cara menghitung peringkat di MySQL

  4. Cara Transpose Baris ke Kolom Secara Dinamis di MySQL

  5. Mengapa baris yang dikembalikan oleh explain tidak sama dengan count()?