Внедрение кода в форму PHP - PullRequest
       2

Внедрение кода в форму PHP

1 голос
/ 18 февраля 2012

У меня есть скрипт, который собирает информацию от пользователей, проверяет ее и отправляет дальше для вставки в БД.

Чтобы избежать любых неприятных проблем в каждом из полей формы, я всегда запускаю «htmlspecialchars»и "addlashes".

Сегодня я посмотрел в своем журнале ошибок и обнаружил следующую ошибку:

Unknown: open(/tmp/sess_574af1197644f6c4019d664d71ea5f9e, O_RDWR) failed: Permission denied (13)

Эта ошибка генерируется в файле, который обрабатывает форму.Видимо, кто-то пытается взломать мое приложение.С чем я борюсь, так это как это предотвратить.К счастью, мой уровень доступа к серверу был настроен правильно, но в противном случае у нас возникла бы проблема.

Как / что мне нужно изменить при проверке формы, чтобы захватывать подобные взломы во внешнем интерфейсе, а нена уровне доступа к серверу?

<?php
session_start();
include ($_SERVER['DOCUMENT_ROOT'].'/inc/config.inc.php');

if ($_POST[leverancier]) { $lid = CheckNumericGet($_POST[leverancier]); }

// Afhandelen van de submit
//
if ($_POST[a] == 'ervaring') {
$naam = CheckStringGet($_POST[naam]);
$ervaring = CheckStringGet($_POST[ervaring]);
$email = CheckStringGet($_POST[email]);
$twitter_naam = CheckStringGet($_POST[twitter_naam]);

// Als er een @ in twitternaam zit weghalen
//
if (substr($twitter_naam, 0,1) == '@') {
    $twitter_naam = substr($twitter_naam, 1);
}

include ($_SERVER['DOCUMENT_ROOT'].'/inc/functies_mail.inc.php');
$cont = "yes";

if ($naam == '' | $ervaring == '' |  $email == '' | $rating_foto == '' | $rating_service == '' | $besteld == 0) {
    $cont = "no";
    $msg[][1] = "Helaas, niet alle verplichte velden zijn ingevuld. Probeer het nogmaals.";
}

if (!CheckEmail($email)) {
    $cont = "no";
    $msg[][1] = "Het ingevulde email adres is niet correct";
}

#Als alle velden ingevuld zijn  
if ($cont == 'yes') {
    $server = gethostbyaddr($_SERVER['REMOTE_ADDR']);

    // Ervaring in database plaatsen
    //
    $query = "INSERT INTO 
". $tabel_ervaring ." (lid, naam, email, foto_score, service_score, ervaring, datum, foto, canvas, album, actief, twitter_naam, lev_akkoord)
        VALUES
            ($lid, '$naam', '$email', $rating_foto, $rating_service, '$ervaring', '$datum', '$foto', '$canvas', '$album', '0', '$twitter_naam', '$akkoord')";
    $result = mysql_query($query) or die(mysql_fout($query, $PHP_SELF));

    $ervaring_id = mysql_insert_id();

    $message = "";
    $subject = "Ervaring Fotovergelijk.nl: ";
    mail("xxx@xxx", "$subject", $message, htmlemailheaders($email));
}
$_SESSION[message] = $msg;

}

Ответы [ 2 ]

3 голосов
/ 18 февраля 2012

Похоже, PHP не удалось открыть файл сеанса из-за ошибки разрешения (общий хостинг с несколькими сайтами, работающими под разными пользователями + коллизия сеансов).Не похоже на попытку взлома.

Однако вы не должны использовать addslashes в контекстах, чувствительных к безопасности (как указано на странице справочника ).Убедитесь, что вы используете подготовленные операторы (используя PDO или mysqli ... Zend не рекомендует использовать расширение mysql) со связанными параметрами.

2 голосов
/ 18 февраля 2012

Чтобы избежать неприятных проблем в каждом из полей формы, я всегда запускаю «htmlspecialchars» и «addlashes».

Это самая забавная часть.Звучит так: «Я всегда использую презервативы и ремни безопасности, чтобы избежать неприятных проблем».
Ни «addlashes», ни «htmlspecialchars» не могут принести никакой пользы, если используются как обычные процедуры безопасности.Оба должны быть использованы для конкретной цели.

Видимо, кто-то пытается взломать мое приложение.

Единственное, что можно сказать, это то, что ваш сервер просто неправильно настроен.Однако, если это не постоянная проблема, а случайная, проблема может быть более сложной (и требует более глубокого изучения.)

что мне нужно изменить при проверке формы

Это довольно забавный вопрос.Мы не знаем о проверке вашей формы, поэтому, очевидно, мы не можем сказать, что изменить.

...