Nasıl LAMBASI uygulamalarda SQL enjeksiyonu önlemek mi?

5 Cevap php

Burada konuşma başlamak için birkaç olasılık vardır:

  1. Başlatıldıktan sonra tüm giriş Escape.
  2. SQL üreten tercihen zaman, her değer Escape.

O zaman bir web sayfası üzerinde çıktısı gibi, SQL başka bir şey kullanmak istiyorsanız her değer Unescape gerekir çünkü ilk çözüm, suboptimaldir.

İkinci çözüm daha mantıklı, ama elle her bir değeri kaçan bir ağrıdır.

Ancak ben MySQLi hantal bulmak, prepared statements farkındayım. Bu sipariş doğru almak için çok önemli olsa da bu bir hata yapmak kolaydır ve böylece yanlış alanlara yanlış veri yazmak çünkü Ayrıca, girişlerinden sorgu ayıran, beni ilgilendiriyor.

5 Cevap

Rob Walker devletler @ gibi parametreli sorgular en iyi bahis vardır. Eğer son ve en büyük PHP kullanarak ediyorsanız, ben son derece PDO (PHP Data Objects) bir göz alarak tavsiye ederim. Bu bir (tabii MySQL dahil) veritabanları geniş olarak adlandırılan parametreler ile hazırlanan tablolar için desteği olan bir yerel veritabanı soyutlama kütüphanesidir.

Hazırlanan tablolar iyi cevaptır. Eğer hata yapabilir çünkü test var!

Bkz this soru.

Ben hazırlanmış deyimleri kullanarak giderdim. Eğer hazır deyimleri kullanmak istiyorsanız, muhtemelen PHP PDO işlevlerini kontrol etmek istiyorum. Bu kolayca hazırlanmış deyimleri çalıştırmak izin kalmaz, aynı zamanda mysql_, mysqli_ veya pgsql_ ile başlayan fonksiyonları arayarak değil agnostik biraz daha fazla veritabanı olalım.

PDO bir gün buna değer olabilir, ancak henüz sadece orada değil. Bu bir DBal ve o satıcılar arasında geçiş daha kolay hale getirmek için (sözde) olan mukavemet bulunuyor. Gerçekten SQL enjeksiyonu yakalamak için inşa değil.

Her neyse, sen hazırlanmış deyimleri kullanarak (I ikinci olduğu) iyi bir önlem olabilir, kaçış ve girişleri sanatize istiyorum. Ben çok daha kolay olduğuna inanıyorum rağmen, örneğin, kullanarak filter.

% 99 zaman, $_GET, $_POST değişkenler, ve $_COOKIE tarayıcısı outputted asla çünkü ben her zaman ilk çözümü kullandım. İkinci çözüm ile kolayca sonunda dizelerinden birini kaçmak için unutabilir oysa Ayrıca şimdiye kadar yanlışlıkla, bir SQL enjeksiyon (eğer sorguda tırnak kullanmayın sürece) ile kod yazmak olmaz.

Aslında tüm siteler varsayılan ayarı magic_quotes vardı çünkü, ben hep bu şekilde yaptık neden oldu, ve bu iki çözümlerden birini kullanarak bir sürü kod yazdım bir kere, değişim için bir sürü iş alır Diğer bir arasındadır.