它会通过不允许 sql 参数中的关键字来避免 SQL 注入吗?
Will it avoid SQL Injections by not allowing sql keywords in params?
我知道当您不能使用 setParameters() 时,清理参数(例如删除引号)并不是针对 SQL 注入的完美解决方案。
但是通过检查参数(参数)是否不包含后面带有空 space 的字符串来清理参数是否安全,如下所示???
'DELETE ', 'ALTER ', 'DROP ', 'SELECT ', 'TABLE '
例如,电子邮件参数已传递到服务器但它包含 DROP 关键字:
字符串参数 = "john@mail'DROP myTable"
SELECT * from Users where email = 'john@mail'DROP mytable'
所以,我的 table 被删除了;
请注意我在每个关键字后留下的 space。这样如果db中的数据包含列出的关键字但没有space,那么它将被允许使用,否则它应该是黑客试图破坏我的数据(ALTER TABLE mydb)。
请随时添加任何 SQL 引擎作为示例:SQL、Oracle、HANA、MySQL
谢谢
不,这还不够。
请遵循行业标准来防止 SQL 注入 laid out by OWASP。
一个明显的 SQL 注入您发布的查询的例子是,如果有人为用户提供了以下输入:
john@mail' OR '1' = '1
这将产生查询:
SELECT * from Users where email = 'john@mail' OR '1' = '1'
他们还可以注入 UNION
以开始从其他表中选择数据。可能还有更具破坏性的例子。
底线是永远不要尝试 "roll your own" SQL 注入保护。比你我聪明得多的人已经尝试解决这个问题,目前公认的使用参数化查询的标准只是我们目前可用的最佳解决方案。
我知道当您不能使用 setParameters() 时,清理参数(例如删除引号)并不是针对 SQL 注入的完美解决方案。
但是通过检查参数(参数)是否不包含后面带有空 space 的字符串来清理参数是否安全,如下所示???
'DELETE ', 'ALTER ', 'DROP ', 'SELECT ', 'TABLE '
例如,电子邮件参数已传递到服务器但它包含 DROP 关键字: 字符串参数 = "john@mail'DROP myTable"
SELECT * from Users where email = 'john@mail'DROP mytable'
所以,我的 table 被删除了;
请注意我在每个关键字后留下的 space。这样如果db中的数据包含列出的关键字但没有space,那么它将被允许使用,否则它应该是黑客试图破坏我的数据(ALTER TABLE mydb)。
请随时添加任何 SQL 引擎作为示例:SQL、Oracle、HANA、MySQL
谢谢
不,这还不够。
请遵循行业标准来防止 SQL 注入 laid out by OWASP。
一个明显的 SQL 注入您发布的查询的例子是,如果有人为用户提供了以下输入:
john@mail' OR '1' = '1
这将产生查询:
SELECT * from Users where email = 'john@mail' OR '1' = '1'
他们还可以注入 UNION
以开始从其他表中选择数据。可能还有更具破坏性的例子。
底线是永远不要尝试 "roll your own" SQL 注入保护。比你我聪明得多的人已经尝试解决这个问题,目前公认的使用参数化查询的标准只是我们目前可用的最佳解决方案。