Можно ли трактовать $ _POST как одинарные кавычки, а не двойные? - PullRequest
0 голосов
/ 05 мая 2018

У меня есть поле $_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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...