【发布时间】:2014-11-20 07:21:32
【问题描述】:
我在 Codeigniter PHP 中构建这个应用程序,我有许多表单和网格。
但是我现在面临的问题在安全方面非常关键。
当我使用 Ajax 发布数据时,我通常会尝试像这样在控制器中获取数据
$this->input->post('someInputValueName');
但是使用上面的语句,任何人都可以在下面编写这个脚本,并且该脚本可以按原样保存在数据库中。
<script type="javascript"> alert('Hello World'); </script>
所以当该数据显示在页面中时,上面的脚本并没有按原样显示,而是被执行了??
所以我就这样尝试
mysql_real_escape_string($this->input->post('someInputValueName');
但是用上面的mysql方法,"和'加了斜杠\,所以这是加到数据库中的最终结果,分页显示。
<script type=\"javascript\"> alert(\'Hello World\'); </script>
因为在网格中我开始出现错误,并且我的网格停止填充因为 jquery 认为它是错误的。
现在来回答我的问题,无论用户在数据库中写入输入数据,输入数据应该按原样(或任何其他方式无关紧要)保存,但是当该数据被调用时,怎么可能?在网格或页面上显示它应该按原样显示,不应该执行或尝试在页面上执行?
如果我发布上面的脚本行,就像在 facebook cmets 中一样,它不会被执行。它只是在评论中显示,没有任何额外的斜线。
【问题讨论】:
-
在某些地方,您显然对输入进行了两次编码。仅在 SQL 查询中使用之前转义 SQL 字符串。更好的是,与时俱进并使用准备好的语句/参数绑定。
标签: javascript php mysql codeigniter