没有 SQL 注入问题的代码

Code which is free from problems of SQL Injection

我的网站上有一个评论框

<td id="commentsBox" class="xec" size="200"></td>

我使用 Java 脚本读取评论框并创建一个 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

是否可以在文本框中输入对数据库有破坏性的内容?

更新

作为对@Linky 的回应,我在此处添加了(部分)Java 代码——尽管我不知道这会带来什么问题,因为我的问题的前提是 SQL 服务器程序可以接受 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;
    }

}

避免 SQL 注入攻击的最佳方法是将内容绑定到特定的列。如果该数据曾经显示给用户,直接将用户评论输入数据库会使您容易受到跨站点脚本攻击。我建议你把这个问题带到 Security Stack Exchange.

注入来自允许 SQL 数据成为或被视为 SQL 命令。在您的示例中,您清楚地描述了数据和命令,据我所知,OPENXMLsp_xml_preparedocumen 都不能 单独使用 导致注入。

因此,以我的专业观点,这似乎是安全的注射。