Webmaster общности: Predpriemach.com | SearchEngines.bg

    Избягване на грешки и инжекции от кавички в PHP и MySQL

    Автор: jooorooo

    Така, започваме един малък, но полезен урок за кавичките в php.
    Ще започнем с кавичките използвани при визуализиране на заявка.
    Например имаме следния код:

    <?php
    $link = "http://web-tourist";
    
    echo "<a id="test" href="$link">Web-tourist</a>";
    ?>

    Тук ще ви даде грешка на ред

    echo "<a id=test href="$link">Web-tourist</a>";

    Защо става така?
    Така е защото възприема тези кавички като затваряши и показва съобщение за неочакван край.
    Как да се предпазим от такъв вид грешки?
    Отговора е лесен, има няколко варянта за избегване на грешки, ето ги и тях:
    Комбинираме еденична и двоина къвичка:

    <?php
    $link = "http://web-tourist";
    
    echo '<a id="test" href="$link">Web-tourist</a>';
    ?>

    или

    <?php
    $link = "http://web-tourist";
    
    echo "<a id='test' href='$link'>Web-tourist</a>";
    ?>

    Следваш варянт е избягване на кавички при задаване на линка, но той не е много подходящ метод, поради често неизпълнение на променливите:

    <?php
    $link = "http://web-tourist";
    
    echo "<a id=test href=$link>Web-tourist</a>";
    ?>

    Следващ начин е които в момента е най-разпространен и може би най-подходящ е да се използват само
    двойни кавички и наклонена черта \ (задължително тази).
    Пример:

    <?php
    $link = "http://web-tourist";
    
    echo "<a id=\"test\" href=\"$link\">Web-tourist</a>";
    ?>

    Сега ще минем към кавичките и SQL инжектирането.
    Значи за инжектиране на SQL с еползва наклонена черта \ и кавички. Ето ви един пример.
    Да речем че имаме форма за вход, но нямаме каквато и да е филтация на символи.

    SELECT * FROM user WHERE username='$username' AND password='$password'

    До тук всичко е нормално, но не е така. Достатъчно е да знае този който иска да хакне името
    на някой потребител, а както се досещате това лесно се намира. Та така да продължиме.
    Хакера (ако мога така да се израза) пише в полето името на потребителя,
    а в полето за парола въвежда:

    'or 1=/*

    Да предположим, че ползва име joro. Тогава заявката към SQL ще има следния вид:

    SELECT * FROM user WHERE username='joro' AND password='or 1=1/*'

    и така с помощта на кавичката

    
    '

    инжектирахме в заявката

    or 1=1

    от което заявката ни се тълкува така:

    ИЗБИРАМЕ всичко ОТ user КЪДЕТО потребител=’joro’ И парола=’ИЛИ 1=1/*’
    Което винаги връща истина и така ще имаме достъп до страницата на joro.

    Друг пример е ако ползвате метода гет, тои може да напише спокойно следния линк:

    http://site.com/login.php?ime=joro&pass='or 1=/*

    Получава се същото действие. Как да се предпазим?
    Най-разпространен и често използван метод е с addslashes(). Тази функция има за цел,
    да замества точно кавичките и наклонената черта (). Ето ви един пример за функцията:

    <?php
    $str = "Is your name O'reilly?";
    
    
    $echo = addslashes($str);
    echo $echo;
    ?>

    Както забелязвате сме написали „Is your name O’reilly?“, а ще се визуализира по следния начин:
    „Is your name O\’reilly?“. Забелецете как добавя наклонена черта преди кавичката, а ако добавиме
    и една наклонена черта към текста „Is your name O’reilly? \ „, изходния резултат ще е следния:
    „Is your name O\’reilly? \ „
    Тази функция е предимно за места с въвеждане на текст с методите GET, POST и COOKIE.