在使用PHP和Javascript应用程序处理表单数据时,我犯了一个新手错误,在这个应用程序中,我没有预料到并支持文本字段中的撇号(')。
更麻烦的是,在一个多万行的应用程序中,我使用单引号或‘’将包含html的变量和可能包含这个表中的撇号的变量括起来,而不是使用引号(“")和转义HTML。
在使用$_POST函数串函数修改输入到MySQL数据中的串函数数据之前,该函数仍然使用撇号存储文本,不使用斜杠。然后修改每个用撇号定义变量的实例,并将其更改为引号(“"),然后转义,我想在这里询问是否遗漏了什么。
下面是我可以使用上面的PHP/Mysql函数对$_POST数据进行处理的一个例子
$db->real_string($_POST "name“),其中数据库中的”name“= O'Brien存储为O'Brien,而不是O‘Brien
当我将这些数据读入前端时,它是这样做的:
var options = '<option value="<?php echo $row[$name];?>" selected><?php echo $row[$name];?></option>';
在这些情况下,当名称包含一个撇号时,javascript控制台会抛出一个错误"Uncaught SyntaxError:缺失)后边的参数列表“,这是有意义的。
我希望就如何用最低的精力/时间来解决这个问题提出建议,但是这样做是正确的,在将来使用撇号或甚至引号时不会引起任何问题。
发布于 2018-09-11 03:15:00
您应该使用准备好的语句,并将查询参数化,而不是转义(以及交换引号类型,我不清楚为什么要这样做)。
然而,这些方法与您当前的问题无关。目前,您正在体验的影响,不正确的封装时,输出,并将开放给XSS注入。您应该使用http://php.net/manual/en/function.htmlspecialchars.php输出到浏览器。
var options = '<option value="<?php echo htmlspecialchars($row[$name], ENT_QUOTES);?>" selected><?php echo htmlspecialchars($row[$name] , ENT_QUOTES);?></option>';但是您也应该阅读,Data.3F,因为您使用的是JS,而不是HTML,所以这可能是不够的。
https://stackoverflow.com/questions/52267927
复制相似问题