19 смертных грехов, угрожающих безопасности программ - страница 36



Pattern p = Pattern.compile("^\\d{1,8}$");

if (!p.matcher(arg).find())

return false;

Connection con = null;

try

{

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

con = DriverManager.getConnection("jdbc:microsoft:sqlserver: " +

                                              "//localhost:1433", "sa", "$3cre+");

PreparedStatement st = con.prepareStatement(

"exec pubs..sp_GetCreditCard ?");

st.setString(1, arg);

ResultSet rs = st.executeQuery();

while (rx.next()) {

   // Получить данные из rs.getString(1)

}

rs.close();

st.close();

}

catch (SQLException e)

{

System.out.println("Ошибка SQL");

return false;

}

catch (ClassNotFoundException e)

{

System.out.println("Ошибка во время исполнения");

return false;

}

finally

{

try

{

con.close();

} catch(SQLException e) {}

}

return true;

}

Искупление греха в ColdFusion

При работе с ColdFusion используйте cfqueryparam в теге , чтобы обезопасить запрос с параметрами.

Искупление греха в SQL

Не следует исполнять в хранимой процедуре строку, полученную из не заслуживающего доверия источника, как процедуру. В качестве одного из механизмов глубоко эшелонированной обороны можно воспользоваться некоторыми функциями для проверки корректности строкового параметра. В примере ниже проверяется, что входной параметр содержит ровно четыре цифры. Заметим, что длина параметра заметно уменьшена, чтобы усложнить передачу любой другой входной информации.

CREATE PROCEDURE dbo.doQuery(@id nchar(4))

AS

DECLARE @query nchar(64)

IF RTRIM(@id) LIKE '[0-9][0-9][0-9][0-9]'

BEGIN

SELECT @query = 'select ccnum from cust where id = ''' + @id + ''''

EXEC @query

END

RETURN

Или еще лучше – потребуйте, чтобы параметр был целым числом:

CREATE PROCEDURE dbo.doQuery(@id smallint)

В Oracle lOg, как и в Microsoft SQL Server 2005, добавлены совместимые со стандартом POSIX регулярные выражения. Поддержка регулярных выражений реализована также для DB2 и Microsoft SQL Server 2000. В MySQL регулярные выражения поддерживаются с помощью оператора REGEXP. Ссылки на все эти решения вы найдете в разделе «Другие ресурсы».

Конец ознакомительного фрагмента.

Если вам понравилась книга, поддержите автора, купив полную версию по ссылке ниже.

Продолжить чтение