SQL enjeksiyon önlemeye geldiğinde, SQL Server ve MySQL arasındaki herhangi bir fark var mı?

9 Cevap php

PHP / MySQL geliştirilmesi için kullanılan ve hiçbir deneyimi SQL Server ile gelişmekte var duyuyorum. Ben PHP MSSQL belgeler üzerinde yağsız ettik ve ben okudum yöntemlerden bazı MySQLi benzer.

Örneğin, MySQL ile ben işlevini kullanmak mysql_real_excape_string(). PHP / SQL Server ile benzer bir işlevi var mı?

SQL Server ile SQL enjeksiyon karşı korumak için almak için ne adımlar gerekiyor?

SQL Server ve MySQL, SQL enjeksiyon önleme ilişkin arasındaki farklar nelerdir?


da - this Mesajı doğru? SQL Server tek bir tırnak için kaçış dize karakter?

9 Cevap

PDO ve parameterized queries kullanın ve her veritabanı motoru hemen hemen aynı görünüyor.

ADODB veya PDO ile parametrized sorguları kullanın. Bu kütüphaneler bağlı olduğu veri tabanına dayalı kullanmak için en iyi kaçış fonksiyonunu biliyorum. Onlar açıklarını tanıtan olmadan MySQL ve MS-SQL arasında geçiş yapmanızı sağlar.

SQL Injection for MySQL and MS-SQL are radically different.

MS-SQL için SQL Injection much daha ciddi. Biri için sorguları yığını olabilir:

select * from `table` where id='1' ; drop table `table`;-- '

Kaçan addslashses () not MS-SQL altında SQL enjeksiyon durdurmak, tamamen farklıdır. O yüzden bu bir kaçan sorgusu çift tırnak sistemi kullanır:

select * from table where test='trying to inject '' didn''t work!'

Bir hacker da bir sql sorgu xp_cmdshell kullanarak cmd.exe erişebilirsiniz. Bu ayrıcalık kaldırıldı emin olun!

MySQL altında can't yığını, bu yüzden onun yaygın bir seçme içine enjeksiyon, aksi takdirde bir alt seçimi kullanabilirsiniz yalnızca çalışır (seçmek sendika kullanmak için, ama sen / silme / bir damla / güncelleme yığını değil ) bir seçme üstüne yerleştirin:

select somthing from table where 1 union select password from mysql.user

Kaçış) geri bölü, addslashes (ile yapılır çoğu zaman çalışır, ama mysql_real_escape_string () olan a lot better.

select * from table where test='trying to inject \' didn\'t work!'

Ayrıca aksi bir hacker bir arka kapı bırakmak mümkün olabilir file_priv devre dışı bırakmak istiyorum:

select test from table where name='jon' union select "<?php eval($_GET[e])?>" into outfile "/var/www/backdoor.php"-- '

it is not the tool SQL enjeksiyon saldırıları sağlayan, bu programcı ve mysql ve sql server hem sen (körü körüne dinamik sql oluşturmak için dizeleri bitiştirmek) yanlış kod eğer enjekte almak için izin nasıl kullanabilirsiniz. hem de bunu önlemek için bağlayıcı parametresini sağlamak.

Hayır sorun veritabanında köklü değil çünkü SQL enjeksiyon karşı sizi korumak için herhangi bir veritabanı ürünün miras hiçbir şey yoktur. Sorun uygulamalar dışında istekleri formüle ve veritabanına göndermek yoldur.

Hayır, MSSQL böyle bir fonksiyonu sağlar, ve mysqli olarak ya mysql_real_escape_string kullanarak olmamalıdır. Her iki durumda da kullanıyor olmalıdır Prepared Statements or Stored Procedeures. Ben PHP belgelerine MSSQL API'leri kullanmak için nasıl yeterli açıklama sağlar inanıyoruz.

Parametreli sorgular gitmek için yoludur. Sqlsrv Sürücü parametreli sorguları destekler. Windows üzerinde PHP çalıştıran Tabii ki, bu sadece sizin için yararlı olacaktır. Sen o şans, orada (örneklerle) daha fazla bilgi burada: How and Why to Use Parameterized Queries.

MSSQL ile sql enjeksiyon riskini azaltmak için saklı yordamlar kullanabilir. Saklı yordamlar çeşitli türleri girdi kabul ediyorum, bu yüzden sql komutları ile dize geçmek zor olurdu.

Ayrıca, kontrol http://msdn.microsoft.com/en-us/library/ms161953.aspx

Herhangi bir veritabanı SQL enjeksiyon saldırıları söz konusu olabilir. Bunları önlemek için bir yolu saklı yordamları kullanmaktır. MSSQL & hem MYSQL desteği saklı yordamlar.

Saklı prosedürleri. İşte bu. Saklanan prosedürleri yürütme dışında herhangi başka bir işlem erişimi engelle. Bu şekilde, sadece bu nedenle, SQL Injection herhangi bir biçimde ortadan kaldırarak, veritabanına yapılacak istekleri belirli bir dizi sağlar.

Desteği, hem saklı yordamlar, ANCAK, hata mesajları çok net çünkü MSSQL onlar, debug kolaydır.