SQL Injection Önleme
-
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("<");
} else if (character == '>') {
result.append(">");
} else if (character == '&') {
result.append("&");
} else if (character == '\"') {
result.append(""");
} 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ığı " .
Acaba bu kodu uygulamak sql injectionu önlemek için yeterlimidir ? Saygılar
-
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.
-
Bahsettiğiniz sqlparameter benzeri yapı javadada mevcut yalnız kendi içinde sql ınjectionu engellediğini zannetmiyorum
-
switch-case daha hızlı olmaz mıydı?
-
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
-
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
-
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 :)
-
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 :)
-
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,
-
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.