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

Javascript 阻止Sql注入,但显示页面上的已发布数据,javascript,php,mysql,codeigniter,Javascript,Php,Mysql,Codeigniter,我正在用Codeigniter PHP构建这个应用程序,在这里我有很多表单和网格 但我现在面临的问题是非常关键的安全问题 当我使用Ajax发布数据时,我通常会像这样在控制器中获取数据 $this->input->post('someInputValueName'); mysql_real_escape_string($this->input->post('someInputValueName'); 但是有了上面的语句,任何人都可以在下面编写这个脚本,并且该脚本可以按原

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

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

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

$this->input->post('someInputValueName');
mysql_real_escape_string($this->input->post('someInputValueName');
但是有了上面的语句,任何人都可以在下面编写这个脚本,并且该脚本可以按原样保存在数据库中

<script type="javascript"> alert('Hello World'); </script>
但是使用上面的mysql方法,
\
斜杠被添加到
,因此这是添加到数据库中并在页面中显示的最终结果

<script type=\"javascript\"> alert(\'Hello World\'); </script>
alert(\'Hello World\');
因为在网格中我开始得到错误,我的网格停止填充,因为jquery认为这是错误

现在来回答我的问题,无论用户在数据库中输入什么,输入数据都应该按原样保存(或以其他方式保存),但当调用该数据以在网格或页面上显示时,它应该按原样显示,而不应该执行或尝试在页面上执行


就像在facebook评论中一样,如果我发布上述脚本行,它不会被执行。它只是按照评论中的原样显示,没有任何附加斜杠。

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

alert('Hello World');aa
将输出您想要的内容

一小条
alert('Hello World');aa
尝试此功能:


看起来它很适合您的需要

很明显,您正在对输入进行两次编码。在SQL查询中使用它之前,只需转义SQL字符串。更好的是,顺应时代,使用准备好的语句/param绑定。
 <XMP><script type="text/javascript"> alert('Hello World'); </script> aa</XMP>