我在用php和javascript应用程序处理表单数据时犯了一个新手错误,因为我没有预料到并支持文本字段中的撇号(')。
更麻烦的是,在一个一万行的应用程序中,我使用单引号或“”来括起包含html的变量和可能包含同一个表中撇号的变量,而不是使用引号(“”)和转义html。
在我使用php函数real\u escape\u string函数修改输入mysql数据的$\u post数据之前,它仍然存储带撇号的文本,没有斜杠。接着修改每个用撇号定义变量的示例,并将其改为引号(“”),然后转义,我想问一下这里是否遗漏了什么。
下面是一个使用上面的php/mysql函数对$\u post数据执行操作的示例
$db->real\u escape\u string($\u post[“name”]),其中“name”=o'brien在数据库中存储为o'brien,而不是o'brien
当我把这些数据读入前端时,是这样做的:
var options = '<option value="<?php echo $row[$name];?>" selected><?php echo $row[$name];?></option>';
在这些情况下,当名称包含撇号时,javascript控制台会在参数列表后抛出一个错误“uncaughtsyntaxerror:missing”),这是有意义的。
我希望能得到一些建议,如何用最少的努力/时间来解决这个问题,但方法是正确的,在将来使用撇号甚至引号时不会引起任何问题。
1条答案
按热度按时间ykejflvf1#
您应该使用prepared语句并参数化查询,而不是转义(以及交换引号类型,我不清楚您为什么要这样做)。
但是,这些方法与您当前的问题无关。目前,您在输出时会遇到不正确封装的影响,并且会对xss注入持开放态度。你应该使用http://php.net/manual/en/function.htmlspecialchars.php 用于输出到浏览器。
但你也应该阅读,https://www.owasp.org/index.php/xss_(跨站点脚本)预防作弊表,为什么你不能.27t,只是html实体,编码不可信的数据,因为你是js,而不是html,所以这可能是不够的。