【问题标题】:Prevent Sql Injection but show posted data as it is on the page防止 Sql 注入,但在页面上显示已发布的数据
【发布时间】: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


【解决方案1】:

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

看起来它适合您的需求

【讨论】:

    【解决方案2】:

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

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

    会准确输出你想要的。

    片段

     &lt;XMP&gt;&lt;script type="text/javascript"&gt; alert('Hello World'); &lt;/script&gt; aa&lt;/XMP&gt;

    关于它的更多信息是Here

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

    【讨论】:

      猜你喜欢
      • 2020-11-15
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 2013-05-21
      • 1970-01-01
      • 2021-09-09
      相关资源
      最近更新 更多