Сделайте php-файл mail() безопасным от SQL-инъекций
Прочитав много уроков, я просто хочу быть в безопасности.
Я сделал контактную формуляр, который выглядит следующим образом
<form name="contakt" accept-charset="UTF-8" method="post" action="./mail.php">
<input type="text" name="name" />
<input type="text" name="email" />
<input type="text" name="tel" />
<input type="submit" value="Send" name="submit" />
<textarea name="message"></textarea>
</form>
Я проверяю через jQuery, если имя и сообщение не пустые и не только заполнены пробелами
и я проверяю почту через jquery с помощью следующего скрипта
function ismailornot(email) {
var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return regex.test(email);
}
Теперь, когда мои переменные пройдены, и я нахожусь на моем mail.php, этого более чем достаточно, чтобы проверить поверх моего сценария $_SERVER['HTTP_REFERER'] и посмотреть, произошли ли эти переменные из моего собственного сценария? Или вы можете изменить переменные $ _SERVER тоже?
Или мне нужно проверять каждую переданную переменную снова, чтобы быть в безопасности?
Например: http://www.w3schools.com/php/php_secure_mail.asp Безопасен ли этот скрипт на 10% от инъекций?
Спасибо за помощь мне:)
2 ответа
Способ: проверьте КАЖДУЮ переданную переменную снова, чтобы быть на безопасной стороне
Попробуйте это после нескольких модов, чтобы соответствовать вашим потребностям, это часть из книги Ларри Уллмана:
function spam_scrubber($value) {
// List of very bad values:
$very_bad = array('to:', 'cc:', 'bcc:', 'content-type:', 'mime-version:','multipart-mixed:',
'content-transfer-encoding:', '<script>');
// If any of the very bad strings are in
// the submitted value, return an empty string:
foreach ($very_bad as $v) {
if (stripos($value, $v) !== false){ return '';}
}
// Replace any newline characters with spaces:
$value = str_replace(array( "\r", "\n", "%0a", "%0d"), ' ', $value);
//remove html tags:
$value = htmlentities($value,ENT_QUOTES);
// Return the value:
return trim($value);
} // End of spam_scrubber() function.
// Clean the form data:
$scrubbed = array_map('spam_scrubber', $_POST);
if(isset($from)) {
$from = $scrubbed['from'];
}else{
$from = '';
}
// Minimal form validation:
if (!empty($from) && !empty($scrubbed['comments']) ) {
// Create the body:
$body = "Name: {$from}\n\nComments: {$scrubbed['comments']}";
$body = wordwrap($body, 70);
// Send the email:
mail('YOUR_EMAIL', 'Contact Form Submission', $body, "From: {$from}");
}