PHP - Bir kesme işareti bir ters eğik çizgi kaldırma

3 Cevap

Aşağıdaki kod sonra kullanıcı olarak bir veritabanına eklenen düz İngilizce, bir ifade girmek için izin verir "$ site." Kullanıcı bir kesme işareti olarak girerse, ifade kesme işareti önünde bir ters eğik çizgi ile saklanır. Nasıl değişken "$ site" kesme önüne ters eğik çizgiler olmadan veritabanına eklenecek alabilirim?

Teşekkür peşin,

John

print   "<div class=\"siteadd\">
    	<form action='process.php?find=$find1' method='post'>
    	Add a book to this topic: <input name='site' type='text' size='50'>
    	<input type='submit' value='Submit'>
    	</form> 
    	</div>";

Sonra, process.php üzerinde:

$site = str_replace($remove_array, "", $_POST['site']);
$site = strtolower($site);
$site = mysql_real_escape_string($site);
$illegal = array("/", "\"");
$site = str_replace($illegal, '', $site);

mysql_query("INSERT INTO `$find` VALUES (NULL, '$site',1,0)");

3 Cevap

Ben ters eğik çizgi güvenlik nedenleriyle PHP tarafından eklendi varsayalım. Hakkında daha fazla bilgi magic quotes. Eğer mysql sorguları geçirilen dizeleri kaçmak için uygun işlevini kullanarak konum beri, PHP'nin kukla kaçan güvenmek zorunda değilsiniz.

Yazısının başında magic_quotes üzerinde iseniz, kontrol ve eğer öyleyse, eğik kaldırın:

if (get_magic_quotes_gpc()) {
    function stripslashes_deep($value)
    {
        $value = is_array($value) ?
                    array_map('stripslashes_deep', $value) :
                    stripslashes($value);

        return $value;
    }

    $_POST = array_map('stripslashes_deep', $_POST);
    $_GET = array_map('stripslashes_deep', $_GET);
    $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
    $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}

BTW, kodunuzda, $find değişken güvenilmeyen bir kaynaktan gelen ve aynı zamanda süzülmüş / öncelenmesi gerekir.

Için çağrı mysql_real_escape_string() muhtemelen nedeni (http://us2.php.net/mysql_real_escape_string), ama aynı zamanda sunucu üzerinde etkin Sihirli Tırnaklar olabilir (http://php.net/manual/en/security.magicquotes.php).

mysqli::prepare , then use bind_param edilen kullanmak mysqli_stmt. Bu da sql enjeksiyon diğer tür önlemek olacaktır.