Doğrudan $ _POST ["x"] veya yerel bir değişkene kopyalamak ve daha sonra kullanmak için?

3 Cevap php

Parçacıkları aşağıdaki çifti, ikisi de aslında aynı şeyi düşünün.

<html>
<body>
    <?php
    if(isset($_POST["firstName"]) && isset($_POST["lastName"])){
    //I'm copying the POST variable to a local one.
    $firstName = $_POST["firstName"];
    $lastName = $_POST["lastName"];     
    echo "<h1>Thank you for taking the census!</h1>";
    echo "On behalf of Sergio's Emporium, we name you: " . $firstName . $lastName . ", conquerer of worlds!";
    //Here I'm just pulling it from the POST info.
    echo "I think that's fitting since you're a " . $_POST["item"];
    }
    else {      
    echo "You didn't write in the necesarry information.";      
    }
    ?>
</body> 
</html>

Hangisi standartlarına tarafından kullanılmak üzere teşvik edilmektedir (güvenlik açısından) kullanın ve hangi daha iyidir.

Ben PHP için yeni olduğum için bu benim söyIüyor şeydir. Teşekkürler çocuklar! :)

3 Cevap

Ben bu iki çözümlerin hiçbiri sürece düzgün, bakış güvenlik açısından hiçbir şeyi değiştirmez söyleyebilirim:

  • Filtre / girişi doğrulamak
  • ve çıkış kaçış.

Eğer bazı HTML çıktısı olarak burada, bu ;-) örneğin, htmlspecialchars ile verilerinizi kaçmak için yararlı olabilir


To facilitate that, some people like to consider that :

  • $_POST ham girdi içeren
  • yani senaryonun geri kalanında "güvenle" kullanabilirsiniz - ve bazı yerel değişken süzülmüş girişi içeren için kullanılır.

Eğer bir yerel var atamak sonrası vars için santizing çeşit yapmalıyım çünkü seni gerektiğini inanıyorum

Performans guru google göre, PHP değişken kopyalama mümkün olduğunca kaçınılmalıdır: http://code.google.com/speed/articles/optimizing-php.html

Ben açıkça bu yüzden üst $_REQUEST kopyalarını ve arkadaşlar yazmak için kullanılan komut isteği beklediği değişkenleri yazısının üstünde görebilirsiniz Şahsen, ben bunu seviyorum:

<?php
    $req_param1 = $_REQUEST['param1'];
    ...
    if (isset($req_param1)) {
        ...
    }
    ...

Günümüzde, ben differerntly bunu. Ben genellikle define() ya da bir sınıfta, const Ben isteği almak için bekliyoruz parametrelerin adlarını tanımlamak için kullanın. Ben o zaman aslında bunları refeernce nerede olduğunu görmek için kod olanlar için arama yapabilirsiniz:

define('REQ_PARAM1', 'param1');
...
function foo(){ 
    if (isset($_REQUEST[REQ_PARAM1])){
    ...
    }
    ...
}

sınıfı ile örnek:

class MyClass {
    const REQ_PARAM1 = "param1";
    ...
    function foo(){
        if (isset($_REQUEST[MyClass::REQ_PARAM1])){
            ...
        }
    }
}