Безопасное получение комментариев в БД с JQuery и CodeIgniter? - PullRequest
1 голос
/ 22 декабря 2011

Итак, у меня есть сценарий комментариев, написанный на Codeigniter, который использует PHP и Jquery.

Обычно пользователь пишет комментарий, а затем нажимает кнопку Отправить.Затем я использую 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, поэтому я экранирую комментарии, используя Bindingпредоставляемый CodeIgniter, как показано ниже

$sql = "INSERT INTO video_comments VALUES(NULL, ?);
$this->db->query($sql,array($comment));

Это работает очень хорошо, может выйти и вставить

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

Теперь проблема в том, что он не может вставить ' (одиночная кавычка) или \ (обратный слэш)?Я предполагаю, потому что это не ускользает от них должным образом?

Одна подсказка могла бы быть, что это действительно позволяет мне вставить \', который я полагаю, избегает единственной кавычки?Но я бы подумал, что связывание CodeIgniters по крайней мере позаботится об этом?

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 22 декабря 2011

Обновление: в соответствии с приведенным ниже обсуждением привязки запросов делают запрос безопасным сам по себе, поэтому нет необходимости использовать escape-функции отдельно.

ИМХО, лучший и безопасный способ - использовать класс активной записи CodeIgniter дляваши запросы, если вы не слишком (опять же слишком) беспокоитесь о производительности.IMO, если вы отключите Active Record, вы почувствуете небольшое улучшение производительности, но если вы включите и используете его, вы получите множество преимуществ.

http://codeigniter.com/user_guide/database/active_record.html

1 голос
/ 22 декабря 2011

Во-первых, не используйте encodeURIComponent.Это совсем не целевое использование.Изменить: Вот ссылка, обсуждающая, для чего этот вызов на самом деле: Когда вы должны использовать escape вместо encodeURI / encodeURIComponent?

Во-вторых, я не вижу, куда вы бежитекод PHP.CodeIgniter имеет встроенные функции escape, такие как escape_str:

$sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";

Более подробная информация здесь: http://codeigniter.com/user_guide/database/queries.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...