PHP'nin include-komutunu anlamak için

4 Cevap php

Ben dosya * handler_login.php * tüm değişkenleri erişilebilir olmasını istiyorum ki ben include dosya * handler_question.php içinde *. * Handler_question.php * aşağıdaki formdan verileri işler.

My form_question.php

<form method="post" action="handler-question.php">
    <p>Title:
        <input name="question_title" type="text" cols="92" />
    </p>
    <p>Question:
        <div id="wmd-container" class="resizable-textarea">
                <textarea id="input" class="textarea" tabindex="101" rows="15" cols="92" name="question_body" /></textarea>
        </div>
    </p>

    <p>Tags:
        <input name="tags" type="text" cols="92" />
    </p> 

    <input type="submit" value="OK" />
</form>

Aşağıdaki dosya son dosya içerir ne olduğunu

My handler_login.php

<?php

// independent variables
$dbHost = "localhost";
$dbPort = 5432;
$dbName = "masi";
$dbUser = "masi";
$dbPassword = "123456";

$conn = "host=$dbHost port=$dbPort dbname=$dbName user=$dbUser password=$dbPassword";

// you can store the username and password to $_SESSION variable
$dbconn = pg_connect($conn);

if(!$dbconn) {
    exit;
}

$sql = "SELECT username, passhash_md5, email
    FROM users
    WHERE username = '{$_POST['username']}'
    AND email = '{$_POST['email']}'
    AND passhash_md5 = '{$_POST['password']}';";

$result = pg_query($dbconn, $sql);
if(!$result) {
    exit;
}

$username = $_POST['username'];
$passhash_md5 = md5($_POST['password']);


 // COOKIE setting /*{{{*/

 /* $cookie may look like this:
   variables
        $username = "username"
        $passhash_md5 = "password-in-md5"
   before md5:
        "usernamepasshash_md5"
   after md5:
        "a08d367f31feb0eb6fb51123b4cd3cb7"
 */

$login_cookie = md5(
    $username .
    $passhash_md5
);

$sql3 = "SELECT passhash_md5


            FROM users
            WHERE username=$_POST['username'];";

$password_data_original = pg_query($dbconn, $sql3);

while ($row = pg_fetch_row($data)) {
    $password_original = $row[0];
}

$login_cookie_original = md5(
    $username .
    $password_original
);


// Check for the Cookie
if (isset($_COOKIE['login']) )
{

    // Check if the Login Form is the same as the cookie
    if ( $login_cookie_original == $login_cookie )
    {
        header("Location: index.php");
        die("logged in");
    }
    header("Location: index.php");
    die("wrong username/password");
}
    // If no cookie, try logging them in
else
{
    //Get the Data
    // we do not want SQL injection so we use pg_escape_string
    $sql2 = sprintf("SELECT * from users
                    WHERE passhash_md5='%s',
                    pg_escape_string($login_cookie));
    $raw_user_list = pg_query($dbconn, $sql2);

    if ($user = pg_fetch_row($row_user_list)) {
        setcookie ("login", $login_cookie);
        header("Location: index.php");
        die("logged in");
    } else {
        header("Location: index.php");
        die("wrong username/password");
    }
}

pg_close($dbconn);
?>

and finally my handler_question.php where the problem occurs

<?php

include 'handler-login.php';                         // This is the problem

$question_body = '{$_POST['question_body']}'        // I get an error right from the beginning
$question_title = '{$_POST['question_title']}'

$sql_questions_question_id = "SELECT question_id FROM users 
                              WHERE username = $username;"
// $username comes from handler_login.php

$questions_question_id = pg_query($dbconn, $sql_questions_question_id);

// to get tags to an array 
$tags = '{$_POST['question_tags']}'; 
$tags_trimmed = trim($tags);
$tags_array = explode(",", $tags_trimmed);

// to save the cells in the array to db
$sql_tags_insert = "INSERT INTO tags (tag, questions_question_id)
                    VALUES (for ($i = 0; $i < count($tags_array); $i++)"


$sql = "SELECT username, passhash_md5, email
    FROM users
    WHERE username = '{$_POST['username']}'       
    AND email = '{$_POST['email']}' 
    AND passhash_md5 = '{$_POST['password']}';";

$result = pg_query($dbconn, $sql);
if(!$result) {
    exit;
}

$username = $_POST['username'];
$passhash_md5 = md5($_POST['password']);


pg_close($dbconn);

?>

* Eğer handler_login.php tüm değişkenleri handler_question.php tarafından erişilebilir olması nasıl olabilir? *

4 Cevap

Ben bu sorulan soruya cevap değil biliyorum ama bu acemi etiketlendi çünkü ben sadece kullanıcılardan any verileri güvenemem, söylemek istiyorum.

En kısa sürede size yaptığınız gibi sql enjeksiyon ve XSS saldırıları riski sitenizi açın.

Eğer bir kullanıcıdan gelen tüm giriş ve escape tüm çıktıyı doğrulamak gerekir.

Tırnak ve diğer sql karakterler kullanıldığında eğer sql kullanıcı sağlıksız verileri kullanarak istemeden sql deyimi kırabilir. Ama daha da önemlisi bu tablolar bırakılan ve yönetici hesapları içerlmek gibi very kötü şeyler sql enjeksiyon neden olabilir.

typecasting, validating and sanitizing değişkenleri ve hazırlanmış tablolar ile PDO kullanarak bak. PDO kullanmak için müsait değilse pg_escape_string.

escaping çıkış örneğin onları sizin ve kullanıcıların şifreleri ve çerezlerini çalmaya izin verebilir sitenizin (XSS) içine bir saldırganın ekleme kodunda neden olabilir değil. Google ilk site kara listeye olacak öğrenirse eğer onlar da, gizli spam bağlantılar ile sitenizi doldurmak olabilir.

Soruyu yanıtlamak için "nasıl include () veya () çalışmaları gerektirir" sadece kesme ve yapıştırma gibi düşünüyorum. Eğer include () ya da (ihtiyaç var nerede) dosyasının içeriğini yapıştırma. Diğer dosyaları değişkenleri görmek için, Robert Greiner onun cevabını dedi kapsamını öğrenmek gerekir.

Dosyayı eklemek için bu kodu vardır:

include 'handler-login.php';

(Dosya bir çizgi ile) ama size dosya handler_login.php (bir çizgi ile) denir söylüyorlar. Sorunuzun sadece bir yazım hatası mı, yoksa sorun olabilir?

(Ayrıca, bu kod bana kırık görünüyor:

$question_body = '{$_POST['question_body']}'

Bunu mu demek istediniz:

$question_body = $_POST['question_body'];

yerine?)

siz de değişken kapsamı farkında olmak zorunda. Sen gerekli PHP include kullanarak dosyaları veya require_oncenin içerebilir, ancak hala geçerli kapsamda onlara erişmek mümkün olması gerekir. Ben PHP docs, bu iyi bir açıklama düşünüyorum.

http://us3.php.net/manual/en/language.variables.scope.php