Php 我的代码是否容易受到带有此LIKE子句的SQL注入的攻击?

Php 我的代码是否容易受到带有此LIKE子句的SQL注入的攻击?,php,mysql,sql,sql-injection,Php,Mysql,Sql,Sql Injection,我正在使用jQuery和PHP进行实时搜索,但我不确定我的查询是否容易受到SQL注入的攻击 在jQuery的帮助下输入字符时,数据被发布到PHP文件中 $searchData = $_POST['searchData']; $searchResult = mysql_query("SELECT * FROM songs WHERE songname LIKE '$searchData%' "); echo $searchResult; 这易受SQL注入攻击吗 >是的,考虑$SCACHE

我正在使用jQuery和PHP进行实时搜索,但我不确定我的查询是否容易受到SQL注入的攻击

在jQuery的帮助下输入字符时,数据被发布到PHP文件中

$searchData = $_POST['searchData']; 

$searchResult = mysql_query("SELECT * FROM songs WHERE songname LIKE '$searchData%' "); 

echo $searchResult;
这易受SQL注入攻击吗

>是的,考虑$SCACHEDATA是:

是的,考虑$SCACHEDATA是:

如果$searchData未在任何地方转义,则是,它易受攻击。

如果$searchData未在任何地方转义,则是,它易受攻击。

是,您可以使用以下方法:

$searchData = addslashes( $_POST['searchData'] );
是的,您可以使用:

$searchData = addslashes( $_POST['searchData'] );

任何时候,当您接受用户输入并将其放入查询时,都应该将其传递给用户。安全总比后悔好

任何时候,当您接受用户输入并将其放入查询时,都应该将其传递给用户。安全总比后悔好

使用mysql\u real\u escape\u string$\u POST['searchData'],或[PDO]代替mysql\u*

使用mysql\u real\u escape\u string$\u POST['searchData'],或[PDO]代替mysql\u*

因为你可以使用工具来操作发送的$\u POST数据,是的,这是危险的


您可以对其进行转义,也可以使用不需要转义的内容,而这正是此时您应该使用的内容。

因为您可以使用工具来操作发送的$\u POST数据,是的,这是危险的

你要么逃逸它,要么使用不需要任何逃逸的东西,这就是你现在应该使用的东西。

是的,它很容易受到攻击。但是其他响应者没有注意到,除了像mysql\u real\u escape\u字符串这样的正常转义外,还需要转义like子句的%字符

这里要掌握的诀窍是,没有什么比普遍引用更好的了。 引用时,您总是为某些特定输出引用文本,例如:

mysql查询的字符串值 mysql查询的like表达式 html代码 json mysql正则表达式 php正则表达式 对于每种情况,都需要不同的引用,因为每种用法都存在于不同的语法上下文中。这也意味着引用不应该在PHP的输入处进行,而应该在特定的输出处进行!这就是为什么像magic\u quotes\u gpc这样的功能被破坏的原因永远不要忘记处理它,或者更好的是,确保它被关闭

那么,在这些特殊情况下,人们会用什么方法引用?请随意纠正我,可能有更现代的方法,但这些方法对我有用

mysql\u real\u escape\u字符串$str mysql\u real\u escape\u stringaddcslashes$str,%_ htmlspecialchars$str json_编码-仅适用于utf8!我使用iso-8859-2的功能 mysql_real_escape_stringaddcslashes$str,'^.[]$|*+?{}'-在这种情况下不能使用preg_quote,因为反斜杠将被转义两次! 预报价 是的,它很脆弱。但是其他响应者没有注意到,除了像mysql\u real\u escape\u字符串这样的正常转义外,还需要转义like子句的%字符

这里要掌握的诀窍是,没有什么比普遍引用更好的了。 引用时,您总是为某些特定输出引用文本,例如:

mysql查询的字符串值 mysql查询的like表达式 html代码 json mysql正则表达式 php正则表达式 对于每种情况,都需要不同的引用,因为每种用法都存在于不同的语法上下文中。这也意味着引用不应该在PHP的输入处进行,而应该在特定的输出处进行!这就是为什么像magic\u quotes\u gpc这样的功能被破坏的原因永远不要忘记处理它,或者更好的是,确保它被关闭

那么,在这些特殊情况下,人们会用什么方法引用?请随意纠正我,可能有更现代的方法,但这些方法对我有用

mysql\u real\u escape\u字符串$str mysql\u real\u escape\u stringaddcslashes$str,%_ htmlspecialchars$str json_编码-仅适用于utf8!我使用iso-8859-2的功能 mysql_real_escape_stringaddcslashes$str,'^.[]$|*+?{}'-在这种情况下不能使用preg_quote,因为反斜杠将被转义两次! 预报价
是的。一个简单的检查方法是在输入中加一个“来看看是否有SQL错误。你遇到过吗?是的。一个简单的检查方法是在输入中加一个“来看看是否有SQL错误。你见过吗?哇,这很危险。。。我会尽量避免对那些函数做一些事情。。。但是,如果您有任何更安全的解决方案来解决我的问题,我将非常高兴地看到它注意,这个特定的示例将不起作用,因为mysql库不允许在一个语句中执行两个查询。只要将操作保持在单个语句中,注入就可以工作。来源:哇,这太危险了。。。我会尽量避免对那些函数做一些事情。。。但是,如果您有任何更安全的解决方案来解决我的问题,我将非常高兴地看到它注意,这个特定的示例将不起作用,因为mysql库不允许在一个语句中执行两个查询。只要将操作保持在一条语句中,注入就会成功
工作来源:+1:PDO,或者某种形式的参数化是推荐的PHP/MySQL解决方案+1:PDO,或者某种形式的参数化是推荐的PHP/MySQL解决方案PDO不是魔弹,不应该被描述为魔弹。如果不严格使用绑定参数,它就没有任何优势。mario是正确的,参数化查询呈现sql注入可用性SPDO不是灵丹妙药,不应该被描述为灵丹妙药。如果不严格使用绑定参数,它就没有任何优势。马里奥是正确的,参数化查询会使sql注入变得无用。Shey,您可能会限制自己使用一个或两个答案,然后只在注释中指向它们?看来你要用你的6分逃避来垃圾处理每一个与注射有关的问题mantra@Col.Sh,你打电话回答垃圾问题?这就是投票失败的原因吗?@schrapnel上校,但好吧,下次我可以把链接放进去。嘿,也许你会用一两个答案来限制自己,然后在评论中只指向他们?看来你要用你的6分逃避来垃圾处理每一个与注射有关的问题mantra@Col.Sh,你打电话回答垃圾问题?这就是投票失败的原因吗?@Col.Shrapnel,但好吧,下次我可以把链接放进去。mysql\u real\u escape\u字符串与用户输入无关。即使是用户输入,它也只能保存strings@Col.弹片你怎么认为它与用户输入无关?根据权力,在向MySQL发送查询之前,应该使用它来确保数据安全——这不正是OP所要求的吗?防止sql注入?我的回答没有做到这一点吗?向MySQL发送查询的数据不等于用户输入。你的回答只是部分的,而且有误导性。不仅用户输入应该转义,是的数字和标识符不能受此函数的保护MySQL\u real\u escape\u string与用户输入无关。即使是用户输入,它也只能保存strings@Col.弹片你怎么认为它与用户输入无关?根据权力,在向MySQL发送查询之前,应该使用它来确保数据安全——这不正是OP所要求的吗?防止sql注入?我的回答没有做到这一点吗?向MySQL发送查询的数据不等于用户输入。你的回答只是部分的,而且有误导性。此函数不仅应转义用户输入,而且不能保护yes编号和标识符
mysql_real_escape_string(addcslashes($str, "%_"))