Bu PHP fonksiyonu ile kaçan güvensiz?

3 Cevap php

Ben veri kaçış eğer

addcslashes($input,chr(0x00) . chr(0x0d) . chr(0x0a) . chr(0x1a) . chr(0x5c) . chr(0x27) . chr(0x22));

Bu SQLi durdurmak için yeterli olacaktır? Ben sürece $ girdi UTF-8 olduğu gibi, yani kendisi ile hiçbir problem olmalı, orada gerekli tüm karakterler var, bu yüzden. Tabii yöntemi veya benzer bir şey kullanımı geçersiz SQLi neden olabilir. Ben veritabanına bağlanma olmadan kaçmak istiyorum, çünkü ben bu kullanıyorum ve eğer o değil, ben onu dönüştürmek, benim girdi UTF-8 olduğunu biliyorum.

3 Cevap

Ben veritabanına bağlanma olmadan kaçmak istiyorum, çünkü ben bu kullanıyorum

Sadece mümkün değildir MySQL özel durum için. Bağlantı sağlanana kadar, PHP veritabanı ile iletişim kurmak için kullanılan ediliyor ne karakter kodlama bilmiyor ve dolayısıyla ' tekabül eden ' sizin dize bayt bilmiyor karakter. Bağlantı her zaman UTF-8 ise, güvenli olurdu, ama bu kod Shift-JIS, diyelim ki, varsayılan olarak, bir kısmi bir karakter kaçabileceği bir sunucu üzerinde konuşlandırılmış ise ' yanlış bayt ve aslında cause daha önce hiç yoktu, bir SQL enjeksiyon.

Diğer veritabanları için, bu tamamen kaçan sıralama yanlış olduğunu; ANSI SQL ve en DBMSs kullanmak '' bir dize bir kesme işareti göstermek için, ve diğer karakterler kaçış yok katına. MySQL de NO_BACKSLASH_ESCAPES config seçeneği ile bu destek olabilir; bir bağlantı kurmadan önce, yine PHP bu seçenek kullanımda olup olmadığını bilemeyiz.

Daha iyi bir seçenek fonksiyonları enjeksiyon önlenmesi için varız, yukarıda söylediğim gibi, dahili filter yöntemi kullanmak olabilir ve olacaktır. Ayrıca tüm bunlara ek olarak hazırlanan ifadeleri kullanabilirsiniz. Orada denenmiş ve işe günlük olarak bir gün kullanılan ortak fonksiyonları test edilir, ve onlarla bir hata veya kusur bulursanız, bize bildirmek için emin olun - bu gibi hijyen de kendi girişimleri güvenmek kalkmayın.

Eğer MySQL işlev kütüphanesini kullanıyorsanız, documentation şiddetle DB girdiyi kendi yöntemi kullanmanızı öneririz.

[Mysql_real_escape_string] (birkaç istisna dışında) her zaman gerekir MySQL sorgu göndermeden önce veri güvenli hale getirmek için kullanılır.

Düzenleme: Ben bunu yapmak için ilk DB bağlanmak istemiyorum farkında değilim; Bununla birlikte, bu PHP ile best practice olarak kabul edilir. @ Bobince cevabı bu durumda neden ayrıntılarını açıklıyor