Pet*_*aig 11 php sql-injection html-encode mysql-real-escape-string
我试图保护自己免受sql注入并使用:
mysql_real_escape_string($string);
Run Code Online (Sandbox Code Playgroud)
发布HTML时,它看起来像这样:
<span class="\"className\"">
<p class="\"pClass\"" id="\"pId\""></p>
</span>
Run Code Online (Sandbox Code Playgroud)
我不确定real_escape_string添加了多少其他变体,所以不想只替换一些并错过其他...我如何将其"解码"回到格式正确的HTML中,例如:
html_entity_decode(stripslashes($string));
Run Code Online (Sandbox Code Playgroud)
zom*_*bat 13
该mysql_real_escape_string()手册页告诉你哪些字符转义:
mysql_real_escape_string()调用MySQL的库函数mysql_real_escape_string,它将反斜杠添加到以下字符:\ x00,\n,\ r,\,',"和\ x1a.
您可以通过使用未转义的表单替换这些转义字符来成功撤消转义.
mysql_real_escape_string()虽然不应该用来清理HTML ...在输出网页数据之前没有理由使用它.它应该只用于您要放入数据库的数据.您的清理过程应如下所示:
输入
mysql_real_escape_string()产量
htmlspecialchars()在打印之前运行任何用户定义的数据使用不同的数据库驱动程序(如MySQLi或PDO)将允许您使用预准备语句,这些语句负责为您转义大多数输入.但是,如果你无法切换或利用它们,那么一定要使用mysql_real_escape_string()...只在插入数据之前使用它.
你搞得一切搞砸了.
如果你用斜杠获取数据,则意味着它已被转义两次.而不是剥离额外的斜杠你应该不添加它们.
更不用说任何逃避都被淘汰了,你应该这样做
而不是任何逃避字符串.
所以,永远不要逃避,不要解码.
问题解决了.