安全替代mysql_real_escape_string吗? (PHP)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了安全替代mysql_real_escape_string吗? (PHP),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1740字,纯文字阅读大概需要3分钟。
内容图文
我正在将变量传递给执行查询的函数
MySQL连接仅在函数内部发生,并在函数内部关闭
我希望能够在将字符串发送给函数之前安全地转义字符串
我无法使用mysql_real_escape_string,因为它需要MySQL连接(仅在函数内部进行)
我知道简单的答案是在函数内部转义字符串,但是我不能这样做,因为我需要发送字符串的一些转义的和一些非转义的部分
例如,我需要运行以下函数:
myquery("'" . escape_me("My string") . "'");
请注意,我要发送两个不加转义的撇号,其中带有转义的字符串.由于这个原因,我无法对myquery函数内部的参数做一揽子mysql_real_escape_string.
我发现以下代码,建议我可以将其用作mysql_real_escape_string的替代方法:
// escape characters
function escape_me($value) {
$return = '';
for($i = 0; $i < strlen($value); ++$i) {
$char = $value[$i];
$ord = ord($char);
if($char !== "'" && $char !== "\"" && $char !== '\\' && $ord >= 32 && $ord <= 126)
$return .= $char;
else
$return .= '\\x' . dechex($ord);
}
return $return;
}
我不知道此功能对多字节攻击是否安全,但我认为每次查询时也需要撤消该功能
例如,输入:
在数据库中测试3的“确定”变为测试3x27s x22OKx22
所以我的主要问题是:
您是否知道是否可以使用另一个函数替代mysql_real_escape_string来安全地转义字符?
解决方法:
>每次调用此函数时连接都是一个糟糕的主意.一个好的计划应用程序不会有这么奇怪的限制.
>您可以像这样使用替换
myquery(“ SELECT * FROM table WHERE id =%s”,“我的字符串”);
>您可以使用另一种替代方式,一种现代的替代方式:预备语句.将在许多其他答案中进行描述.
由于没有人发布,这是一个粗略的例子
function fetchAll(){
$args = func_get_args();
$query = array_shift($args);
$stmt = $pdo->prepare($query);
$stmt->execute($args);
return $stmt->fetchAll();
}
$a=$db->fetchAll("SELECT * FROM users WHERE status=? LIMIT ?,?",$status,$start,$num);
>只要您使用单字节编码或utf-8,就无需使用mysql_real_escape_string,因此mysql_escape_string(不建议使用)或添加斜线就足够了
内容总结
以上是互联网集市为您收集整理的安全替代mysql_real_escape_string吗? (PHP)全部内容,希望文章能够帮你解决安全替代mysql_real_escape_string吗? (PHP)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。