У меня есть поле $_POST
с именем password
, в котором хранится пароль, отправленный в форме HTML. Первые две проверки:
if(isset($_POST['password'])){
if(strlen($_POST['password'])>=8){
Проблема в том, что если сообщение содержит знак доллара ($)
, то все, что стоит за ним, включая знак доллара, игнорируется. Я вижу это, потому что если что-то типа odte$tPa55word
будет опубликовано, strlen
вернет только 4
. Я думаю, это потому, что $_POST['password']
обрабатывает содержимое как строку двойных кавычек ("")
, а не одинарную кавычку ('')
, что означает все, что после $ интерпретируется как переменная.
Я нашел одно решение для этого, которое относится к addcslashes()
, но проблема в том, что у меня нет идеи, если последующий preg_match
игнорирует эти косые черты или будет реагировать на них.
Вопрос в том, есть ли какой-нибудь способ обработки $_POST
переменных, таких как строки с одинарными кавычками, а не строки с двойными кавычками, чтобы сделать входные данные более безопасными, а если это невозможно, то какой тип escape-оператора я должен использовать для создания вещи как это не происходит?
EDIT
Полный код:
<?php
if(isset($_POST['password'])){
if(strlen($_POST['password'])>=8){
if($_POST['password']===$_POST['passwordConfirm']){
$password=password_hash($_POST['password'], PASSWORD_BCRYPT);
}
else{
echo('Err3');
}
}
else{
echo('Err1: '.strlen($_POST['password']));
}
}
else{
echo('Err0');
}
?>
Запрос:
curl -v -d "password=odte$tPa55word" -w "\n" -X POST http://localhost:8888/test.php
Возвращает:
Err1: 4