Передача POST-данных из Javascript (jquery) в php проблемы? - PullRequest
0 голосов
/ 16 ноября 2010

Я пытался передать это значение:

// Content to submit to php
Others string here. And this link:
http://www.youtube.com/watch?v=CUUgKj2i1Xc&feature=rec-LGOUT-exp_fresh+div-1r-2-HM

на страницу php и вставьте ее в базу данных. вот мой текущий код:

... // javascript

var content = $("#mcontent").val();
$.ajax({
    url : '<?php echo PATH; ?>functions/save.php',
    type: 'POST',
    data: 'id=<?php echo $_GET['id']; ?>&content=' + content + '&action=save&val=<?php echo md5("secr3t" . $_SESSION['userid_id']); ?>',
    dataType: 'json',

    success: function(response) {
        if (response.status == 'success') {
            alert(response.message);
        } else {
            alert(response.message);
        }
    }
});

На самом деле ошибок нет, но в базе данных сохранено:

Others string here. And this link:
http://www.youtube.com/watch?v=CUUgKj2i1Xc

Полагаю, я знаю, в чем проблема, проблема в следующем:

http://www.youtube.com/watch?v=CUUgKj2i1Xc&feature=rec-LGOUT-exp_fresh+div-1r-2-HM

Я думаю, что "& feature =" принимает как другие данные POST. Что я пробовал:

  • Добавление косой черты перед амперсандом (http://phpjs.org/functions/addslashes:303)

  • Использование функции кодирования / декодирования HTML Javascript (также можно найти в Интернете)

Но оба не работают. Есть ли у вас другие способы?

EDIT:

Предвидите ли вы другие проблемы, которые могут возникнуть? Контент печатается / пишется пользователем. Это означает, что пользователь может напечатать / написать что угодно. На заднем плане я сделал другие проверки, в том числе «mysql_real_escape_string»

Ответы [ 2 ]

1 голос
/ 16 ноября 2010

Приятной особенностью jQuery является то, что параметр data может принимать объект JS, поэтому вам не нужно пытаться создать строку запроса вручную.

<?php

    $data = array("id" => $_GET['id'], 
                  "action" => "save", 
                  "val" => md5("secr3t",$_SESSION['userid_id'])
                 );
    $json_data = encode_json($data);
    $json_data = str_ireplace($json_data, '</script>', '<\/script>');
    echo "var data = $json_data;";
?>
data.content = content;
$.ajax({
            url : '<?php echo PATH; ?>functions/save.php',
            type: 'POST',
            data: data,
            dataType: 'json',
1 голос
/ 16 ноября 2010

Учись убегать.Вы уязвимы для XSS .В этом случае ваши данные являются частью URL, поэтому вы должны urlencode() it.

var content = $("#mcontent").val();
$.ajax({
    url : '<?php echo PATH; ?>functions/save.php',
    type: 'POST',
    data: 'id=<?php echo urlencode($_GET['id']); ?>&content=' + urlencode(content) + '&action=save&val=<?php echo md5("secr3t" . $_SESSION['userid_id']); ?>',
    dataType: 'json',

    success: function(response) {
        if (response.status == 'success') {
            alert(response.message);
        } else {
            alert(response.message);
        }
    }
});

Примечание: я предполагаю, что PATH не содержит специальных символов, таких как ' и \.Поскольку $_SESSION['user_id'] является md5-ed, его не нужно экранировать, поскольку он безопасен (md5 возвращает строку фиксированной длины 32, содержащую только 0-9 и af.

...