Защита пользовательских данных - для использования в вызовах метода, SQL и файловые вызовы -- php поле с участием security поле с участием validation поле с участием user-input пол Связанный проблема

Securing user-data - for use in method calls, SQL and file calls


0
vote

проблема

русский

Я использую <код> $_GET , <код> $_POST и <код> $_COOKIE Переменные в вызовах метода, SQL-запросы и файловые вызовы - и необходимо сбежать / Перепишите эти данные пользователя для лучшей безопасности (избегайте приступов инъекций и тому подобное). Как бы вы порекомендовали это сделано?

Некоторые идеи из встроенной функции Escape ... Чтобы получить соки, протекающие:

    .
  • Добавить обратно черты к: <код> x00, , , , ', " и <код> x1a , чтобы сделать строку безопасным для SQL-запросов - как в mysql_real_escape_string ().
  • Ограничить количество принятых символов <Код> [a-zA-Z0-9 _-.] (где "<код> . " - это сбеженный "." - dot).

Ваши входы ценятся. Спасибо.

Английский оригинал

I am using $_GET, $_POST and $_COOKIE variables in method calls, SQL queries and file calls - and it is necessary to escape / rewrite this user-data for better security (avoid injection attacks and the like). How would you recommend this is done?

Some ideas from built-in escape function ... to get the juices flowing:

  • Add backslashes to: x00, , , , ', " and x1a to make the string safe for SQL queries - as in mysql_real_escape_string().
  • Limit the number of accepted characters to [a-zA-Z0-9 _-.] (where "." is an escaped "."-dot).

Your inputs are appreciated. Thanks.

</div
           

Список ответов

1
 
vote
vote
Лучший ответ
 

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

Например:

    .
  • для mysql queries, используйте <код> mysql_real_escape_string или <Код> mysqli_real_escape_string или <Код> PDO::quote
      .
    • или используйте подготовленные операторы ( mysqli , pdo )
    • Не добавляйте обратные язвы самостоятельно: зачем это делать, когда правильные и хорошо работающие (и хорошо проверенные!) Экспертные функции уже существуют?
  • для вывода HTML, используйте <код> htmlspecialchars или htmlentities .
<Р> В любом случае: не изобретать колесо

Есть выходные функции / методы, которые уже существуют для многих видов вывода: используйте их!

 

As escaping depends on the system you are sending the data too, my suggestion would be to use the functions provided by PHP, specifically created for each system.

For instance :

  • for MySQL queries, use mysql_real_escape_string, or mysqli_real_escape_string, or PDO::quote
    • Or use prepared statements (mysqli, PDO)
    • Don't add backslashes yourself : why do that when proper and well-working (and well-tested !) escaping functions already exist ?
  • for HTML output, use htmlspecialchars or htmlentities.

Either way : don't re-invent the wheel !

There are escaping functions/methods that already exists for many kind of output : use those !

</div
 
 
     
     
0
 
vote

Также обратите внимание, что некоторые, которые вы должны избежать (если введен в систему) - это местоположение изображения и т. Д.

Если кто-то горячий связан с изображением (например, аватар) с этим

http://yoursite.com/admin/user/delete/1

, а затем код на вашем представлении составляет

 <код> <img class="avatar" alt="<?php echo $userName; ?>" src="<?php $avatarUrl; ?>" />   

Тогда вы можете случайно удалять пользователя, если вы вошли в систему как admin. Конечно, надеюсь, что такого рода удаления выполняется с постом, но он все еще может быть обходным.

В этом случае <код> htmlspecialchars() не поможет.

Вы можете сделать его сложнее для злоумышленника, обеспечивая все методы изменения данных, чтобы быть с постом, и вы можете сделать его практически невозможным, создавая токен для каждого удаления действия, и проверяя его перед удалением.

 

Also note that somethings you must escape (if user entered) are image locations etc

If someone hot linked to an image (for example an avatar) with this

http://yoursite.com/admin/user/delete/1

and then the code in your view is

<img class="avatar" alt="<?php echo $userName; ?>" src="<?php $avatarUrl; ?>" /> 

Then you might be accidentally deleting a user if you are logged in as admin. Of course, hopefully that sort of deletion is done with a post, but it can still be circumvented.

In this case, htmlspecialchars() won't help.

You can make it harder for an attacker by enforcing all data changing methods to be with a post, and you can make it almost impossible by generating a token for every delete action, and verifying it before deleting.

</div
 
 
0
 
vote

Я использую так:

 <код> function escape($sql) {     // Stripslashes     if (get_magic_quotes_gpc()) {         $sql = stripslashes($sql);     }     //if this is the intedger     if (!is_int($sql) || $sql == '0') {         $sql = "'" . mysql_real_escape_string($sql) . "'";     }     return $sql; }   

и в mysql запрос

 <код> mysql_query("SELECT SQL_CACHE * FROM `page` WHERE `id` = ".escape($_GET['id'])." LIMIT 1");   
 

I'm using like this:

function escape($sql) {     // Stripslashes     if (get_magic_quotes_gpc()) {         $sql = stripslashes($sql);     }     //if this is the intedger     if (!is_int($sql) || $sql == '0') {         $sql = "'" . mysql_real_escape_string($sql) . "'";     }     return $sql; } 

And in MySQL query

mysql_query("SELECT SQL_CACHE * FROM `page` WHERE `id` = ".escape($_GET['id'])." LIMIT 1"); 
</div
 
 
 
 

Связанный проблема

2  Как я могу скачать партию фотографий из URL-адресов, хранящихся в базе данных MySQL  ( How do i download a batch of pictures from urls stored in a mysql database ) 
У меня есть база данных, содержащая URL-адреса изображений, которые выглядят так: <код> DATABASE : id / url 1 / http://www.pic1.jpg 2 / http://www.pic2.jpg ...

1  Форма подписки Rapidmail перенаправляет после подписки электронной почты - MailChimp  ( Rapidmail subscription form redirect after email subscription mailchimp ) 
Я создаю веб-страницу, которая включает в себя очень простую форму подписки, в основном собирая адреса электронной почты, заинтересованные в продукте. Для это...

0  Определить переменные в шаблоне  ( Define variables in a template ) 
Можно ли определить переменную в шаблоне экспрессии шаблона? Если это так, как можно сделать так? Пример следующего использования в качестве примера. Я ищу ...

1  PHP: DateTime '-1 день'  ( Php datetime 1 day ) 
Я хочу получить дату вчерашнего дня текущей даты в часовом поясе SpeciFC. Я пробовал это, но это не работает: <код> LoopGenrtReport2 Я все еще получаю се...

6  Magento Получить цену, включая налог в файл нет шаблона  ( Magento get price including tax in a none template file ) 
На данный момент я пытаюсь получить цену продукта, включая налог в PHP-файле для моего продукта. У меня есть этот код в данный момент: <код> $_product = Mag...

0  Процедура ничего не делает  ( Procedure doesnt do anything ) 
Я сделал процедуру в MySQL. Похоже, это выглядит. Я назвал эту процедуру из PHP. После этого звонка стол все еще остается пустым, и я не знаю почему. ...

1  Проблемы проектирования базы данных с отношениями  ( Database design issues with relationships ) 
Я работаю над обновлением для существующей базы данных, которая была разработана без какого-либо из кода для реализации рассматриваемой конструкции. Теперь я ...

0  WordPress do_action password_reset не работает  ( Wordpress do action password reset is not working ) 
Я использую WordPress 4.7.3. Сброс пароля не работает. Когда я отладил свой код. Я добрался до этой линии внутри пользователей .php reset_password (): <код>...

1  Разрешение дополнительных переменных с переписыванием COND  ( Allowing optional variables with rewrite cond ) 
У меня в настоящее время есть следующий код: <код> RewriteCond %{REQUEST_URI} !assets/ RewriteCond %{REQUEST_URI} !uploads/ RewriteRule ^([a-z|0-9_&;=-]+)/(...

0  Невозможно получить любые поля объявлений из API API Facebook (PHP v2.8.1)  ( Unable to fetch any adset fields from facebook ads api php v2 8 1 ) 
Я получаю поля Adaccount просто хорошо. Но все мои попытки получить адапты неудачей. Я пытаюсь получить идеи всех кампаний, бегущих под Adaccount. Но во-первы...

2  Прокси GOUTTE / DOXCE не работает  ( Goutte guzzle proxy doesnt work ) 
Я пытаюсь использовать gutte через прокси, но он проходит через исходный IP. Я не получаю никакой ошибки или что-то еще, и запросы идут хорошо, но хотя ориг...

1  Доступ к данным из другой базы данных в Joomla 3.2+  ( Accessing data from another database in joomla 3 2 ) 
Я обновляю свои компоненты от Joomla 1.7 до Joomla 3.3 и должен держать оригинальную базу данных. Поэтому мне необходимо получить доступ к данным отображения ...

0  Композитор застрял на `Что-то изменилось, снова смотрел на все правила` Во время обновления laravel до 5,6  ( Composer stuck on somethings changed looking at all rules again while updati ) 
Я пытаюсь обновить мою приложение Laravel. Я был в 5.2, а теперь я в 5,5. Все работает нормально до здесь. Теперь я изменил его на <код> 5.6.* в моем файле...

0  dbase_open () не может открыть файл .dbf  ( Dbase open cant open a dbf file ) 
Я установил расширение DBASE PHP в моем сервере Ubuntu. И я вижу, что DBASE_OPEN (...) не отображает никакой ошибки, но, хотя я предоставляю существующий путь...

-1  Как схватить значение флажки как целое число и не строку? [Дубликат]  ( How to grab checkbox value as integer and not string ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

Связанный проблема

2  Как я могу скачать партию фотографий из URL-адресов, хранящихся в базе данных MySQL 
1  Форма подписки Rapidmail перенаправляет после подписки электронной почты - MailChimp 
0  Определить переменные в шаблоне 
1  PHP: DateTime '-1 день' 
6  Magento Получить цену, включая налог в файл нет шаблона 
0  Процедура ничего не делает 
1  Проблемы проектирования базы данных с отношениями 
0  WordPress do_action password_reset не работает 
1  Разрешение дополнительных переменных с переписыванием COND 
0  Невозможно получить любые поля объявлений из API API Facebook (PHP v2.8.1) 
2  Прокси GOUTTE / DOXCE не работает 
1  Доступ к данным из другой базы данных в Joomla 3.2+ 
0  Композитор застрял на `Что-то изменилось, снова смотрел на все правила` Во время обновления laravel до 5,6 
0  dbase_open () не может открыть файл .dbf 
-1  Как схватить значение флажки как целое число и не строку? [Дубликат]