SQL Injection Önleme

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    RDxMaster
    RDxMaster's avatar
    Kayıt Tarihi: 15/Eylül/2007
    Erkek

    Merhaba hacılar websitesi yapiyoruz sql injectiondan kurtulmak için şöyle bir kod var elimizde.

    package sql;

     

    import java.text.CharacterIterator;

    import java.text.StringCharacterIterator;

     

    public class EscapeCharacter {

     

        public final class EscapeChars {

     

            public String forHTML(String aText) {

                final StringBuilder result = new StringBuilder();

                final StringCharacterIterator iterator = new StringCharacterIterator(aText);

                char character = iterator.current();

                while (character != CharacterIterator.DONE) {

                    if (character == '<') {

                        result.append("&lt;");

                    } else if (character == '>') {

                        result.append("&gt;");

                    } else if (character == '&') {

                        result.append("&amp;");

                    } else if (character == '\"') {

                        result.append("&quot;");

                    } else if (character == '\t') {

                        addCharEntity(9, result);

                    } else if (character == '!') {

                        addCharEntity(33, result);

                    } else if (character == '#') {

                        addCharEntity(35, result);

                    } else if (character == '$') {

                        addCharEntity(36, result);

                    } else if (character == '%') {

                        addCharEntity(37, result);

                    } else if (character == '\'') {

                        addCharEntity(39, result);

                    } else if (character == '(') {

                        addCharEntity(40, result);

                    } else if (character == ')') {

                        addCharEntity(41, result);

                    } else if (character == '*') {

                        addCharEntity(42, result);

                    } else if (character == '+') {

                        addCharEntity(43, result);

                    } else if (character == ',') {

                        addCharEntity(44, result);

                    } else if (character == '-') {

                        addCharEntity(45, result);

                    } else if (character == '.') {

                        addCharEntity(46, result);

                    } else if (character == '/') {

                        addCharEntity(47, result);

                    } else if (character == ':') {

                        addCharEntity(58, result);

                    } else if (character == ';') {

                        addCharEntity(59, result);

                    } else if (character == '=') {

                        addCharEntity(61, result);

                    } else if (character == '?') {

                        addCharEntity(63, result);

                    } else if (character == '@') {

                        addCharEntity(64, result);

                    } else if (character == '[') {

                        addCharEntity(91, result);

                    } else if (character == '\\') {

                        addCharEntity(92, result);

                    } else if (character == ']') {

                        addCharEntity(93, result);

                    } else if (character == '^') {

                        addCharEntity(94, result);

                    } else if (character == '_') {

                        addCharEntity(95, result);

                    } else if (character == '`') {

                        addCharEntity(96, result);

                    } else if (character == '{') {

                        addCharEntity(123, result);

                    } else if (character == '|') {

                        addCharEntity(124, result);

                    } else if (character == '}') {

                        addCharEntity(125, result);

                    } else if (character == '~') {

                        addCharEntity(126, result);

                    } else {

                        //the char is not a special one

                        //add it to the result as is

                        result.append(character);

                    }

                    character = iterator.next();

                }

                return result.toString();

            }

     

            private void addCharEntity(Integer aIdx, StringBuilder aBuilder) {

                String padding = "";

                if (aIdx <= 9) {

                    padding = "00";

                } else if (aIdx <= 99) {

                    padding = "0";

                } else {

                    //no prefix

                }

                String number = padding + aIdx.toString();

                aBuilder.append("&#" + number + ";");

            }

        }

    }

    Gördüğünüz üzere bu kod " > < gibi işaretleri htmldeki kod karşılığına döndürüyor Örneğin " karakterinin html kod karşılığı &quot; .

    Acaba bu kodu uygulamak sql injectionu önlemek için yeterlimidir ? Saygılar

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek

    Java'da SqlParameter yokmu? (c# sqlparameter diye aratırsan görebilirsin) Çünkü bu tür kendi çapınızda yapacağınız şeyler illaki abuse edilebilr.


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    RDxMaster
    RDxMaster's avatar
    Kayıt Tarihi: 15/Eylül/2007
    Erkek

    Bahsettiğiniz sqlparameter benzeri yapı javadada mevcut yalnız kendi içinde sql ınjectionu engellediğini zannetmiyorum

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ZoRKaYa
    ZoRKaYa's avatar
    Kayıt Tarihi: 18/Eylül/2007
    Erkek

    switch-case daha hızlı olmaz mıydı?


    echo "imzanız özel karakter içermemelidir";
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek
    RDxMaster bunu yazdı

    Bahsettiğiniz sqlparameter benzeri yapı javadada mevcut yalnız kendi içinde sql ınjectionu engellediğini zannetmiyorum

    C# 'da sqlparameter sayesinde butür filtrelemerle uğraşmıyoruz. SpringFramework içinde varmış galiba java'da. Birde şurada "Parameterized Queries"den bahsetmiş https://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek

    hatta bu güvenlik zımbırtılarını kendim kodlamayı düşündüğüm zamanlarda şu mesajı görüp doğru yolu bulmuştum:

    http://stackoverflow.com/a/910694/1330411


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wasd
    wasd's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    Bunu phpde nasıl yaparız diye ben de araya kaynayayım :-)

    htmlspecialchars

    mysql_real_escape_string (iptal edilecek diyorlar php.nette)

    addslashes

    bildiğim karakter temizleyici-düzenleyiciler var,

    birde is_numeric, ctype_digit(tamsayı değer için is_numeric yerine neden bunu kullanıyorlarmış araştırabilirsiniz bilmiyorsanız)

    gibi kontrol fonksiyonları var. Daha detay bilen varsa yazmak konusunda çekinmesin :)


    :)
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    RDxMaster
    RDxMaster's avatar
    Kayıt Tarihi: 15/Eylül/2007
    Erkek
    ZoRKaYa bunu yazdı

    switch-case daha hızlı olmaz mıydı?

    Kodu ben yazmadım hocam buldum ve henüz düzenlemedim kendime göre :)

  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek
    wasd bunu yazdı

    Bunu phpde nasıl yaparız diye ben de araya kaynayayım :-)

    htmlspecialchars

    mysql_real_escape_string (iptal edilecek diyorlar php.nette)

    addslashes

    bildiğim karakter temizleyici-düzenleyiciler var,

    birde is_numeric, ctype_digit(tamsayı değer için is_numeric yerine neden bunu kullanıyorlarmış araştırabilirsiniz bilmiyorsanız)

    gibi kontrol fonksiyonları var. Daha detay bilen varsa yazmak konusunda çekinmesin :)

    http://stackoverflow.com/a/60496/1330411 şuraya bakarmısın hocam, 


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wasd
    wasd's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    TeRRoR bunu yazdı
    wasd bunu yazdı

    Bunu phpde nasıl yaparız diye ben de araya kaynayayım :-)

    htmlspecialchars

    mysql_real_escape_string (iptal edilecek diyorlar php.nette)

    addslashes

    bildiğim karakter temizleyici-düzenleyiciler var,

    birde is_numeric, ctype_digit(tamsayı değer için is_numeric yerine neden bunu kullanıyorlarmış araştırabilirsiniz bilmiyorsanız)

    gibi kontrol fonksiyonları var. Daha detay bilen varsa yazmak konusunda çekinmesin :)

    http://stackoverflow.com/a/60496/1330411 şuraya bakarmısın hocam, 

    Okuyorum, teşekkür ederim :) ayrıca mysql_ ile başlayan fonksiyonların alayı kalkıyomuş hepsine bakmamıştım ben, gördüğüm iyi oldu.


    :)
Toplam Hit: 3170 Toplam Mesaj: 10