Как сделать пуленепробиваемый GET/POST запрос/передачу данных

Статус
В этой теме нельзя размещать новые ответы.

m1ko

Создатель
Регистрация
15 Авг 2010
Сообщения
42
Реакции
3
Здравствуйте ребят, как сделать пуленепробиваемый GET/POST запрос/передачу данных?

От подмены значений допустим я сделал проверку.
Допустим в GET передается &nick=nick123 не важно что это будет, значения буквы+цифры,
понятно что одни цифры можно было бы засунуть в intval, но есть еще и буквы, интересует как защититься от XSS и SQL инъекций

Хватит ли такого кода для GET/POST ?


Код:
    function filt($value) {
        $value = strip_tags($value);
        $value = htmlentities($value, ENT_QUOTES, "UTF-8");
        $value = htmlspecialchars($value, ENT_QUOTES);
        return $value;
    }

Добавление в базу идет таким образом из POST
Код:
    function newPosition($nick) {
        $queryPosition1 = "INSERT INTO positions (uid, nick) VALUES ('', '$nick')";
        $newPosition1 = mysql_query($queryPosition1) or die (mysql_error());
}

И хотелось бы шифровать GET запросы что бы за место &nick=nick21 было &nick=kj4k2jh3kj5h21lk34 что нибудь такое.

Не кидайте в меня камнем))) в интернете много информации и везде разная, нужно действительно достоверная и правильная инфа как правильно писать, очень нужно!
 
1. Используй регулярки для проверки гет и пост.
2. urlencode/urldecode

С телефона не могу написать регулярку, не удобно:(
 
  • Нравится
Реакции: m1ko
1. Используй регулярки для проверки гет и пост.
2. urlencode/urldecode

С телефона не могу написать регулярку, не удобно:(
За второй пункт Like, видел этот вариант, нужно от SQL инъекций еще фильтрацию на всякий случай
 
почитайте на досуге Для просмотра ссылки Войди или Зарегистрируйся
особенно там где про параметры
Блин я когда начал учить php, PDO не было, вроде бы научился чуть писать и тут DPO и теперь не могу врубить в него, привык по старинке писать..
 
Мини туториал по PDO:
Подключение:
PHP:
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
Самый простой запрос:
PHP:
$row = $db->query('SELECT * FROM `table`');
Получение записей:
PHP:
while($fetch = $row->fetch()){
        print_r($fetch);
}
Запрос с защитой от инъекции:
PHP:
$select = $db->prepare('SELECT * FROM `table` WHERE `name`=:name'); // Подготовка запроса
$data['name'] = $_POST['name']; // данные для запроса (массив)
$row = $select->execute($data); // Выполнение запроса

Это всё что необходимо знать...
 
И хотелось бы шифровать GET запросы что бы за место &nick=nick21 было &nick=kj4k2jh3kj5h21lk34 что нибудь такое.

Не кидайте в меня камнем))) в интернете много информации и везде разная, нужно действительно достоверная и правильная инфа как правильно писать, очень нужно!

Для просмотра ссылки Войди или Зарегистрируйся
не совсем так, как вы хотите, но будет цифровая подпись. т.е. ручками уже нельзя будет поменять параметр.
 
как сделать пуленепробиваемый GET/POST запрос/передачу данных
Проверку переданных данных нужно делать в зависимости от потребности.
Я предпочитаю не просто проверять, но вырезать невалидную инфу.
Тогда запрос типа ?module=3"hack'9 будет работать как ?module=39 при verify($_GET['module'],3) :
Код:
function verify($data,$mode=0)
{
    switch ($mode)
    {
        case 1:
            return preg_replace("/[^a-z0-9A-Z]+/",'',$data); // числа, буквы
            break;
        case 2:
            return preg_replace("/[^a-zA-Z]+/",'',$data); // буквы
            break;
        case 3:
            return preg_replace("/[^0-9]+/",'',$data); // числа
            break;
        case 4:
            return preg_replace("/[^a-z0-9A-Z\-_\.]+/",'',$data); // числа, буквы, тире, прочерк, точка
            break;
        case 5:
            return preg_replace("/[^ [:punct:]".('a-zA-Z')."0-9]+/",'',$data); // соотв. текущему языку алфавит + цифры и знаки препинания
            break;
        default:
            return preg_replace("/[~@\+\?\%\/\;=\*\>\<\"\'\-]+/",'',$data); // блек-лист в крайнем случае.
            break;
    }
}
 
Проверку переданных данных нужно делать в зависимости от потребности.
Я предпочитаю не просто проверять, но вырезать невалидную инфу.

Более удачным решением было бы не "вырезать невалидную инфу", а отсекать подобные запросы, уведомляя администратора сайта о попытке "взлома".
Использовать $ в конце искомой строки и настоятельно рекомендую вам ограничивать длину "валидной" строки.
 
  • Нравится
Реакции: m1ko
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху