好吧,我想知道如何将这个mysql代码转换为mysqli。
function protect($string) {
return mysql_real_escape_string(strip_tags(addslashes($string)));
}
我知道您将mysql更改为mysqli,但是它要求2个与mysql一起使用的参数,所以我希望在mysqli中看到它
而且我还没有在stackoverflow上找到有人对新的mysqli版本有疑问,所以我无法发现自己
此功能是个坏主意。
在所有传入数据上不加选择地使用strip_tags()
和addslashes()
会不必要地破坏它,并添加零安全性。
要将数据输入数据库,请仅使用字符串转义功能real_escape_string()
.
要在HTML页面上显示来自用户的数据,请剥离标签then或使用real_escape_string()
以避免任何脚本攻击。
尝试这样:
htmlspecialchars()
编辑
$mysqli = new mysqli("host", "username", "pword", "db");
function protect($string) {
return $mysqli->real_escape_string(strip_tags(addslashes($string)));
}
最好完全不使用它!
$link = mysqli_connect("localhost", "root", "", "aaa");
$city = "'s Hertogenbosch";
$city = mysqli_real_escape_string($link, $city);
echo($city);
是一种用于防止SQL注入的hack,它甚至没有做到100%。此功能从未打算保护任何东西。这是一个简单的字符串格式化功能。
mysql_real_escape_string()
是使过渡更加容易的另一招。尽管在撰写本文时,mysqli_real_escape_string()
已被弃用了很长时间,但没有人可以借口使用某种填充程序进行过渡,因为每个人都应该已经在使用带有准备好的语句甚至更好的PDO的MySQLi。
对于mysql_*
和strip_tags()
,它们在这种情况下是无用的,只会破坏您的数据。不要使用它们。
为了防止SQL注入,应该使用准备好的语句并确保没有任何变量输入直接插入SQL。
例如:
addslashes()