Захват SQL-инъекций на классическом asp - форма репоста ставит множество тиков - PullRequest
3 голосов
/ 04 марта 2011

Я использую SQL Server 2005 с классическим ASP и в форме репоста (я возвращаюсь на ту же страницу), я заменяю каждое текстовое поле следующим образом:

course = trim(replace(request("course"),"'","''"))\

Проблема с этимесли в случае ошибок проверки мне нужно будет повторно опубликовать форму несколько раз, отметки, которые я заменяю, помножаются кратно.

Есть ли другой способ безопасной проверки строковых полей без замены этого типа?

Ответы [ 4 ]

5 голосов
/ 04 марта 2011

вам лучше использовать параметризованный запрос:

dim cmd : set cmd = server.createObject("ADODB.Command")
dim param
dim sql : sql = "INSERT INTO table(course) VALUES (?)"
cmd.ActiveConnection = yourDBconnection
cmd.CommandType = adCmdText

set param = cmd.CreateParameter("course", adVarChar, , 20, request("course"))
cmd.Parameters.Append param

cmd.CommandText = sql
cmd.Execute

, чтобы вы были полностью в безопасности с SQL инъекцией

4 голосов
/ 04 марта 2011

Замените только ' для использования в строке sql.(, что лучше делать с параметризованными запросами .. )

3 голосов
/ 04 марта 2011

Самый простой способ - сделать экранирование SQL только при фактической вставке в базу данных:

course = trim(request("course"))

Создать функцию SafeSQL:

function SafeSQL(TempStr)
    SafeSQL = Replace(TempStr,"'","''")
end function

Тогда, когдавы вставляете:

"INSERT INTO table(course) VALUES ('" & SafeSQL(course) & "')"

Отказ от ответственности: у меня есть только рабочее знание ASP, я действительно не знаю лучших практик.

0 голосов
/ 04 марта 2011

вы можете сделать это

курс = трим (заменить (запрос ("курс"), "'", "& apos;"))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...