PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Mendemonstrasikan injeksi SQL di PL/pgSQL

Kueri SQL di PL/pgSQL direncanakan seperti pernyataan yang disiapkan. Selama Anda hanya lulus nilai seperti yang Anda lakukan, injeksi SQL umumnya tidak mungkin . Detail:

Gunakan SQL dinamis dengan EXECUTE dan tanpa penanganan parameter yang tepat untuk benar-benar mendemonstrasikan injeksi SQL.

Suka (ini caranya tidak untuk melakukannya!):

CREATE OR REPLACE FUNCTION login_v(em varchar, passwd varchar)
  RETURNS SETOF users AS
$func$
BEGIN
   RETURN QUERY EXECUTE
        'SELECT *
         FROM   users
         WHERE  email = $1
         AND    encrypted_password = crypt(''' || passwd || ''', encrypted_password)'
   USING em;
END
$func$  LANGUAGE plpgsql;

Variabel pertama em diteruskan dengan benar dengan USING klausa sebagai nilai dan dengan demikian tidak dapat disalahgunakan untuk injeksi SQL.

Tapi variabel kedua passwd tidak benar digabungkan tanpa benar melarikan diri. Dengan demikian, input pengguna dapat dikonversi ke kode SQL. Injeksi SQL.

Jangan pernah gunakan ini! Kecuali saat mendemonstrasikan bagaimana tidak melakukannya.

Kerusakan serupa mungkin terjadi saat menggabungkan string SQL di klien secara tidak benar.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Meningkatkan kinerja kueri jsonb Postgres yang dikombinasikan dengan kueri relasional

  2. postgreSQL - psql \i :cara menjalankan skrip di jalur yang diberikan

  3. Memasukkan array ke dalam postgresql

  4. Cara yang benar untuk menggunakan salin Postgres jdbc

  5. psycopg2.OperationalError:FATAL:protokol frontend tidak didukung 1234.5679:server mendukung 2.0 hingga 3.0