阻止Sql注入,但显示页面上显示的已发布数据

时间:2014-11-20 07:21:33

标签: javascript php mysql codeigniter

我在Codeigniter PHP中构建这个应用程序,我有很多表单和网格。

但是我现在面临的问题对于安全问题非常关键。

当我使用Ajax发布数据时,我通常会尝试在这样的控制器中获取它

$this->input->post('someInputValueName');

但是使用上面的语句,任何人都可以在下面编写脚本,并且该脚本可以保存在数据库中。

<script type="javascript"> alert('Hello World'); </script>

所以当这个数据显示在页面中时,上面的脚本不会显示,而是会被执行??

所以我试过这个

mysql_real_escape_string($this->input->post('someInputValueName');

但是使用上面的mysql方法,\"添加了'斜杠,因此这是添加到数据库的最终结果,并显示在页面中。< / p>

<script type=\"javascript\"> alert(\'Hello World\'); </script>

Cuz在网格中我开始收到错误,我的网格停止填充cuz jquery认为这是错误。

现在来我的问题,如果用户在数据库中写入输入数据的输入数据应该保存原样(或者其他任何方式都很重要),但是当调用该数据时,怎么可能?要在网格上或页面中显示它应该显示,不应该执行或尝试在页面上执行?

就像在facebook评论中,如果我发布上面的脚本行,它就不会被执行。它只是在评论中显示,没有任何额外的斜杠。

2 个答案:

答案 0 :(得分:1)

试试这个功能: http://php.net/manual/de/function.htmlentities.php

看起来适合您的需求

答案 1 :(得分:0)

您可以使用XMP标记。 因为XMP忽略HTML标记和实体 所以

 <XMP><script type="text/javascript"> alert('Hello World'); </script> aa</XMP>

将准确输出您想要的内容。

片段

 <XMP><script type="text/javascript"> alert('Hello World'); </script> aa</XMP>

有关它的更多信息是Here

注意codepre标记不适用于您的原因。