У меня есть поле для комментариев на моем сайтекод, который свободен от проблем SQL Injection
<td id="commentsBox" class="xec" size="200"></td>
Я использую Javascript для чтения в поле для комментариев и создать строку XML.
<ROWS><COMMENTS>My comments</COMMENTS></ROWS>
Строка XML передается в хранимую процедуру через java. (Я упростил SQL кода и XML-строки для целей данного вопроса)
CREATE PROCEDURE [DB].[TEST$ExecuteXML] @doc VARCHAR(max)
,@P_Result VARCHAR(max) OUTPUT
AS
BEGIN
DECLARE @idoc INT;
EXEC sp_xml_preparedocument @idoc OUTPUT
,@doc;
INSERT INTO MyTable (
COMMENTS
,UPDATE_DATE
)
SELECT COMMENTS
,getDate()
FROM OPENXML(@idoc, '/ROWS', 1) WITH (
COMMENTS VARCHAR(200) 'COMMENTS'
);
SET @p_result = 1;
END
я смотрел на сайтах, связанных с SQL инъекций, таких как https://technet.microsoft.com/en-us/library/ms161953(v=sql.105).aspx
Можно ли ввести что-то в текстовое поле, что будет разрушительным для базы данных?
UPDATE
В ответ на @Linky добавить здесь (часть) код Java - хотя я в растерянности, чтобы понять, как это может быть проблематично, так как предпосылка моего вопроса в том, что в SQL Server процедура может принимать что угодно в XML.
XMLObject br = new XMLObject(xmlString);
String result = br.update();
public class XMLObject {
public static final int RESULT_FAILED = 0;
public static final int RESULT_SUCCESS = 1;
protected DBConnection dbConn = null;
protected String theXML=null;
public XMLObject(String theXML) {
this.theXML=theXML;
}
public String update() {
String result;
ArrayList<DBField> fields = new ArrayList<>();
fields.add(new DBField(DBField.STRING, theXML, false));
result = DMLUtils.executeString("ExecuteXML", fields);
return result;
}
}
Обычно проблема заключается в коде, который вызывает команду db (либо процедуру, либо любой другой DML). Да - это все еще возможно - это зависит от того, как вы вызываете процедуру с Java – Linky
Чтобы понять, как это может быть проблематично, см. Http://stackoverflow.com/questions/332365/how-does-the-sql-injection-from- the-bobby-tables-xkcd-comic-work – Linky