我有一个PHP应用程序,我使用PHP mysql本机库来运行和管理数据库查询。 在我的应用程序中,我使用抽象层来验证SQL注入的用户输入[和任何其他输入]。 有时,在某些区域,相同的输入会多次验证SQL注入,这会为输入添加额外的斜杠
例如:
$str = "It's cold";
$str = validate_against_sql($str);//produces It\'s cold
$str = validate_against_sql($str);//produces It\\\'s cold
这意味着会在输入/字符串中添加额外的斜杠。
我用谷歌搜索了2个小时并且找不到办法,并尝试自己写一个函数来完成这个过程,但我不熟悉正则表达式而且不能做到这一点。
有没有办法添加到我的" validate_against_sql"首先检查参数是否已作为查询参数有效的函数,所以在这种情况下,我会忽略再次验证它并阻止添加斜杠?
我的意思是这样的:
function validate_against_sql($str){
if(!string_already_valid_as_sql_query_parameter($str)){
mysql_real_escape_string($str);
}
}
所以,基本上我想要" string_already_valid_as_sql_query_parameter"函数检查是否已跳过所有特殊字符,在这种情况下,不要再次验证相同的输入。
答案 0 :(得分:0)
有没有办法添加到我的“validate_against_sql”函数中,该函数首先检查参数是否已作为查询参数有效
事实上,如果在这里使用了一个,则无法发布您的问题,因为它包含所谓的“无效”双重转义字符串。意味着根本就没有“string_already_valid_as_sql_query_parameter”这样的东西。
有些时候,在某些区域,多次对SQL注入验证相同的输入,这会为输入添加额外的斜杠
你做错了什么。应该只有一个地方需要格式化SQL值。绝不是必须输入验证层。让我告诉你如何做到这一点。
您必须理解输入验证和 SQL查询创建之间的区别。虽然输入验证本身没有任何问题,它应该完全没有任何问题。使用SQL。可以验证数据类型,格式,存在等。但是输入验证层永远不应该触摸数据,更改其另一层的格式。仅仅因为在输入验证时您无法知道数据的去向 - SQL查询或电子邮件消息,或者它将显示回浏览器。
应该有另一个抽象层,以专门处理SQL。而这一个必须负责SQL格式。这是你正在寻找的东西,因为它将在执行之前根据给定数据构建查询,减少双重转义的任何可能性。