кодировка символов и безопасность сайта - PullRequest
0 голосов
/ 17 октября 2011
function intfix($i)
{
   $i = preg_replace('/[^\d]/', '', $i);
   if (!strlen($i))
      $i = 0;
   return $i;
}


function textfix($text = ""){
if(!is_array($text)){ $text = htmlentities($text,ENT_QUOTES,"UTF-8");
}
return $text;
}

Эти две функции фильтруют все пользовательские переменные. Как вы думаете, это достаточно безопасно?

Я немного запутался в кодировке символов. Я хочу, чтобы мои пользователи могли поиграть с искусством ACII и использовать любые символы, которые они хотят, но на данный момент это кажется невозможным. Что нужно сделать? Это может быть связано с кодировкой таблицы и моими функциями.

EDIT:

Цифры на самом деле очень большие. Иногда в триллионах.

Это пример того, как я фильтрую пользовательский ввод:

if($_GET['number']){ $number = intfix($_GET['number']);  }
if($_GET['text']){ $text = textfix($_GET['text']);  }'

Это ошибка, о которой вы говорите?

Кроме того, вот как я их фильтрую перед вставкой в ​​БД:

function filter($input,$s=1){

    $input = strip_tags($input, "");
    $input = str_replace("\n", "<br />", $input);
    if($s == 1){$input = bbcode($input); } // smileys and bbcode
    $input = textWrap($input); // wordwrap without breaking html
    return $input;
}

function unfilter($input){ // to unfilter in case I need to show the text in a textbox

    $input = html_entity_decode($input,ENT_QUOTES,"UTF-8");
    $input = str_replace("<br />", "\n", $input);

    return $input;

}

Ответы [ 2 ]

1 голос
/ 17 октября 2011

Замените intfix на intval() или floatval() - вы заново изобретаете колесо, если не ожидаете очень больших чисел.

Я надеюсь, что вы не используете textfix() на входе ??Это было бы очень большой ошибкой.Вы должны кодировать объекты ТОЛЬКО на выходе, а не на входе.

Для UTF-8 вам, вероятно, понадобится:

ini_set('default_charset', 'UTF-8');
0 голосов
/ 17 октября 2011

Функция intfix() не требуется, вы можете просто ввести тип int, выполнив $num = (int)$num;

Что касается санации строк, если вы не можете использовать параметризованные запросы, пропустите строку через myqsl_real_escape_string().

...