Шаги для обеспечения ввода, который должен быть записан в базе данных? - PullRequest
3 голосов
/ 28 декабря 2010

Допустим, у меня есть Text, это текстовое поле POST. В этой области я мог бы написать все, что хотел бы написать. Такие как XSS, SQL и другие возможные плохие коды. Для разметки я буду использовать BBCode, поэтому я хотел бы отобразить код, не заставляя его работать.
Единственное, чего я хочу избежать, так это того, что БД испорчена! Есть ли чрезвычайно безопасный способ сделать это?

Шаги, которые я на самом деле делаю:

  1. Укажите тип содержимого и кодировку Content-Type: text/html; charset=UTF-8

  2. Ограничить вход. Ex.: Max 500 characters

  3. Использовать htmlentities () $GoodText = htmlentities($Text, ENT_QUOTES, "UTF-8");

  4. Использовать mysql_real_escape_string () $GoodText = mysql_real_escape_string($GoodText);

  5. Сохранить в БД $db->store($User, $GoodText);

Насколько я прочитал, шаги 3 и 4 совершенно одинаковы, но я бы хотел получить объяснение.

В любом случае, это рабочий метод?
Должен ли я также использовать токены для форм POST?

Ответы [ 2 ]

1 голос
/ 28 декабря 2010

Краткий обзор для вас:

  • Использовать токены для подделок межсайтовых запросов.

  • Использовать htmlspecialchars / entity для атак на межсайтовый скриптинг.

  • Использование mysql_real_escape_string против SQL-инъекции.

В целях безопасности базы данных вам нужно будет только выйти, используя функцию mysql_real_escape_string.

0 голосов
/ 28 декабря 2010

Я использую эту функцию, которая в основном объединяет шаги 3 и 4. Работает с одномерным массивом и строками.

function escape($mixed){
    if(is_array($mixed)){
        foreach($mixed as $m => $value){
            $mixed[$m] = mysql_real_escape_string(htmlspecialchars($value, ENT_QUOTES, "UTF-8"));
        }
    }else{
        $mixed =  mysql_real_escape_string(htmlspecialchars($mixed, ENT_QUOTES, "UTF-8"));
    }
return $mixed;
}
...