Php mysqli\u real\u escape\u字符串使程序无用
下面的代码使用Php mysqli\u real\u escape\u字符串使程序无用,php,mysql,mysqli,emoticons,Php,Mysql,Mysqli,Emoticons,下面的代码使用mysqli\u real\u escape\u string保护字符串。 但是如果没有mysqli\u real\u escape\u字符串,预期输出无法正常工作,但需要它来保护 $str = mysqli_real_escape_string($con,$_POST['str']); /* get each word in the sentence using for-loop then */ switch($eachword){
mysqli\u real\u escape\u string
保护字符串。
但是如果没有mysqli\u real\u escape\u字符串
,预期输出无法正常工作,但需要它来保护
$str = mysqli_real_escape_string($con,$_POST['str']);
/*
get each word in the sentence using for-loop then
*/
switch($eachword){
case ':)': $eachword = '<img src="smile.gif">';
break;
/*
and so forth and so on
*/
}
$newstr .= $eachword;
//for-loop ends
**mysqli_query($con,"insert into tbl(comment)VALUES($newstr)");**
$str=mysqli\u real\u escape\u字符串($con,$\u POST['str']);
/*
然后使用for循环获取句子中的每个单词
*/
交换机($eachword){
案例“:)”:$eachword='';
打破
/*
等等等等
*/
}
$newstr.=$eachword;
//用于循环结束
**mysqli_查询($con,“插入tbl(注释)值($newstr)”)**
e、 g
- 输入:$str=“我在这里:)很好”
- 预期输出:
$newstr=“我很好”代码>
- 当前输出:
$newstr=“我在这里:)很好”代码>
现在一切正常。感谢支持者。您正在对一些数据运行
mysqli\u real\u escape\u string
,之前……代码示例中根本没有使用。所以这没有任何意义
在将变量插入SQL字符串之前,请立即使用mysqli\u real\u escape\u string
。(更好的方法是使用准备好的查询和绑定参数)
如果您试图防御XSS,那么在将变量插入HTML字符串之前,请立即使用htmlspecialchars
在将用户输入与某些文本进行比较之前,请不要使用这两个选项。已更新
请注意,您必须已经连接到数据库,才能使用mysqli\u real\u escape\u string
,因为它考虑了所选数据库的默认字符集。在使用数据库之前是否连接到它
在你的问题中,我甚至没有看到任何疑问。除非要将传递的字符串插入数据库,否则使用mysqli\u real\u escape\u string将没有任何好处
现在我看到您正在用标记替换smileys,然后将其插入到数据库中。但是,如果我是你,我会做以下事情:
function ParseSmiley($str)
{
$smileys = array(
':)' => "<img src='smile.gif' />" //Put all your smileys in this array
);
$parsed_string = strtr($str, $smileys);
return $parsed_string;
}
然后,当您想要显示内容时,假设字符串位于$content
中,请按如下方式显示:
echo ParseSmiley($content)代码>为什么需要它来保护?您是否尝试过参数化查询而不是字符串转义?或者甚至有疑问?我想@Quentin已经知道了。你需要htmlspecialchars。注意mysqli\u real\u escape\u字符串的“mysqli”部分。这是用来写数据库查询的。老实说,为什么要循环每个单词?只需使用str_replace将表情符号替换为标记。。。快多了!是的,我确实需要查询更新的代码什么XSS
?我在保护用户输入一些html
内容,这可以使用htmlentites
来完成,但在插入之前也必须使用mysqli\u real\u escape\u string
。如果我在插入数据库之前使用mysqli\u real\u escape\u string
。“”元素即表情符号显示为html代码
而非图像!!如前所述,您的问题中没有任何内容容易受到任何类型的攻击。如果要将内容插入数据库,则应在将其放入SQL字符串之前立即使用mysqli\u real\u escape\u string
。不是在你剧本的顶端。如果我在插入数据库之前使用mysqli\u real\u escape\u字符串,“
”元素即表情符号以html代码而不是图像的形式出现!!”-那么你需要看看你从数据库中得到了什么,你用它做了什么,而不是你放进了什么。“那么你需要看看你从数据库中得到了什么以及你用它做了什么,而不是你在数据库中放了什么。”--我能做什么?@quentinthat意味着你可以按原样插入数据库并在显示时输出为“”元素?@user3187838是的,没错。这样,你就不必担心标记中的引号被删除了。
$parsed_string = mysqli_real_escape_string($con,$_POST['str']);
mysqli_query($con,"INSERT INTO tbl (comment) VALUES ($parsed_string)");