gpt4 book ai didi

javascript - javascript 中数据库字段的撇号

转载 作者:行者123 更新时间:2023-11-29 10:04:10 26 4
gpt4 key购买 nike

在使用 PHP 和 Javascript 应用程序处理表单数据时,我犯了一个菜鸟错误,我没有预料到并支持文本字段中的撇号 (')。

更麻烦的是,在一个多万行的应用程序中,我使用单引号或“”来括起包含 HTML 的变量和可能包含同一个表中撇号的变量,而不是使用引号 ("") 和转义html。

在我修改使用PHP函数输入MySQL数据的$_POST数据之前real_escape_string function ,它仍然存储带撇号的文本,不带斜杠。然后修改用撇号定义变量的每个实例并将其更改为引号(“”)然后转义,我想在这里询问我是否遗漏了某些内容。

下面是我可以使用上面的 PHP/Mysql 函数对 $_POST 数据执行的操作的示例

$db->real_escape_string($_POST["name"]) where "name" = O'Brien In the Database is stored as O'Brien, not O\'Brien

当我将这些数据读入前端时,它是这样完成的:

var options = '<option value="<?php echo $row[$name];?>" selected><?php echo $row[$name];?></option>';

在这些情况下,当名称包含撇号时,javascript 控制台会抛出错误“Uncaught SyntaxError:参数列表后缺少 )”,这是有道理的。

我希望获得有关如何以最少的精力/时间解决此问题的建议,但以正确的方式完成,在将来使用撇号甚至引号时不会造成任何问题。

最佳答案

您应该使用准备好的语句并对查询进行参数化,而不是转义(并交换引号类型,我不清楚您为什么这样做)。

但是这些方法与您当前的问题无关。目前,您在输出时会遇到封装不正确的影响,并且还会受到 XSS 注入(inject)的影响。您应该使用 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>';

但是您还应该阅读,https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#Why_Can.27t_I_Just_HTML_Entity_Encode_Untrusted_Data.3F ,因为您使用的是 JS,而不是 HTML,所以这可能还不够。

关于javascript - javascript 中数据库字段的撇号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52267927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com