как да предотвратите SQL инжектиране в JSP?

Точно миналата седмица правех някои PHP неща. Работих малко решение за предотвратяване на SQL инжекции. PHP винаги е бил моят човек, той има 3 решения за употреба (може би повече). Едната е да активирате "магически заявки" с помощта на функцията stripslashes(). Друг (препоръчителен) е да използвате функцията mysql_real_escape_string(). Това просто и проблемът ми е решен. Нещата обаче не изглеждат толкова прости, когато става въпрос за JSP. Търсих и не намерих никаква вградена функция за отстраняване на наклонени черти или за извършване на подобни неща (вярвам, че такава функционалност може да се реализира с помощта на основни JAVA функции, но...).

Моля, помогнете ми да защитя моята база данни. Чух за PreparedStatement, но наистина не мога да го разбера? (Усещам истинското значение на новак).


person Nadjib Mami    schedule 07.06.2011    source източник
comment

В PHP можете да направите това с помощта на Reflections. За да извикате защитени или частни методи, използвайте метода setAccessible() http://php.net/reflectionmethod.setaccessible (просто го задайте на TRUE)

  -  person Oliver Charlesworth    schedule 08.06.2011


Отговори (1)


Просто използвайте PreparedStatement вместо Statement.

т.е. използване

String sql = "INSERT INTO tbl (col1, col2, col3) VALUES (?, ?, ?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, col1);
preparedStatement.setString(2, col2);
preparedStatement.setString(3, col3);
preparedStatement.executeUpdate();

вместо

String sql = "INSERT INTO tbl (col1, col2, col3) VALUES ('" + col1 + "', '" + col2 + "', '" + col3 + "')";
statement = connection.createStatement();
statement.executeUpdate(sql);

PreparedStatement също предлага удобни методи за настройка за други типове, като setInt(), setDate(), setBinaryStream() и т.н.

Моля, обърнете внимание, че този проблем не е свързан с JSP. Като цяло е свързано с Java. Писането на необработен Java код в JSP клас също се счита за лоша практика. Най-добрата практика е да се създаде самостоятелен клас, който изпълнява всички задачи за взаимодействие с DB на определена таблица, който също се нарича клас DAO (обект за достъп до данни). След това можете да импортирате/използвате този DAO клас в сервлет клас.

Вижте също:

person BalusC    schedule 07.06.2011
comment
Уау, ето един коментар, който разпространява много информация, вашият коментар беше много полезен за мен, направихте го лесен, благодаря ви и е решен благодарение на вас! - person Nadjib Mami; 08.06.2011
comment
Моля. Между другото, това беше отговор, а не коментар. Тези малки неща, които виждате под въпросите/отговорите, са коментари :) - person BalusC; 08.06.2011
comment
+1 за кода на Java в JSP е коментар за лоша практика. Изглежда като толкова страхотна идея, когато започвате с JSP, но о, болката, когато се върнете по-късно, за да изтръгнете цялата тази несвързана с изглед логика. - person Marvo; 08.06.2011