Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用JQuery和CodeIgniter将评论安全地放入数据库?_Php_Jquery_Codeigniter_Escaping - Fatal编程技术网

Php 使用JQuery和CodeIgniter将评论安全地放入数据库?

Php 使用JQuery和CodeIgniter将评论安全地放入数据库?,php,jquery,codeigniter,escaping,Php,Jquery,Codeigniter,Escaping,所以我有一个使用PHP和Jquery的Codeigniter编写的注释脚本 基本上,用户写评论,然后点击提交。然后,我使用AJAX调用服务器端脚本来检查、验证和插入注释 在JQuery端,我使用encodeURIComponent $.ajax({ url : 'http://domain.com/ajax/post_comment', type : 'post', data : encodeURIComponent( $(this).val() ), succe

所以我有一个使用PHP和Jquery的Codeigniter编写的注释脚本

基本上,用户写评论,然后点击提交。然后,我使用AJAX调用服务器端脚本来检查、验证和插入注释

在JQuery端,我使用
encodeURIComponent

$.ajax({
    url : 'http://domain.com/ajax/post_comment',
    type : 'post',
    data : encodeURIComponent( $(this).val() ),
    success : function(data){
                //more code here
            }
});
在PHP端,正如我所说,我使用的是CodeIgniter,因此我使用CodeIgniter提供的绑定来避开注释,如下所示

$sql = "INSERT INTO video_comments VALUES(NULL, ?);
$this->db->query($sql,array($comment));
这工作得很好,可以转义和插入

!"£$%^&*()_+=-}{~@:?></.,#;][¬`|

!“£$%^&*()_+=-}{@:?>更新:根据下面的讨论,查询绑定本身使查询安全,因此不需要单独使用转义函数

IMHO,最好且安全的方法是使用CodeIgniter Active Record类进行查询,前提是您对性能没有太多(同样太多)担忧。IMO,禁用Active Record只会略微提高性能,但启用并使用它会带来很多好处


更新:根据下面的讨论,查询绑定本身使查询安全,因此不需要单独使用转义函数

IMHO,最好且安全的方法是使用CodeIgniter Active Record类进行查询,前提是您对性能没有太多(同样太多)担忧。IMO,禁用Active Record只会略微提高性能,但启用并使用它会带来很多好处


首先,不要使用encodeURIComponent。这根本不是它的预期用途。 编辑:这里有一个链接,讨论该呼叫的实际用途:

其次,我看不出PHP代码中的转义在哪里。CodeIgniter内置了转义函数,如escape_str:

$sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";
更多信息请点击此处:

首先,不要使用encodeURIComponent。这根本不是它的预期用途。 编辑:这里有一个链接,讨论该呼叫的实际用途:

其次,我看不出PHP代码中的转义在哪里。CodeIgniter内置了转义函数,如escape_str:

$sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";
更多信息请点击此处:

如果
var\u dump($comment)
从AJAX帖子中获取值后,在将其发送到DB之前,您会发现问题所在。您是否尝试手动插入字符串以确保其转义?为什么要使用
encodeURIComponent
?如果
var\u dump($comment)
从AJAX帖子中获取值后,在将其发送到DB之前,您会发现问题所在。您是否尝试手动插入字符串以确保其转义?为什么要使用
encodeURIComponent
?好的,但它会添加斜杠,这是我想要避免的。我可以避免吗?或者如何输出转义的ch像
\'
这样的字符看起来像
'
并不重要,我想我使用的是
带斜杠answer@EricBrandel查询绑定已经转义。它只写在您链接的页面中,在转义\u str()之外几行方法。好的,这可以工作,但它添加了斜杠,这是我想要避免的。我可以避免吗?或者我如何输出像
\'
这样的转义字符,使其看起来像
没关系,我想我使用的是
带斜杠。
。感谢您的帮助answer@EricBrandel查询绑定已经转义。它只写在链接的页面中,只有几行除了escape_str()方法之外。这是一个正确的答案。我个人觉得活动记录没有给你足够的灵活性。我同意活动记录很好,但AR“如何更安全"与使用查询绑定/占位符相比?@SeanHJenkins如果Active Record不起作用,比如子查询,那么如果需要,您可以使用简单的查询,并进行适当的清理,但我认为在上面的情况下,Active Record是一个好方法。尽管这是一个正确的答案。我个人觉得Active records没有给您足够的灵活性。我同意t Active Record很好,但是AR如何比使用查询绑定/占位符“更安全”呢?@SeanHJenkins如果Active Record不起作用,比如子查询,那么您可以在需要时使用普通查询,并进行适当的清理,但我认为在上面的情况下,Active Record是一个好方法。