嗨,我真的在我的編程生涯的開始。 我必須爲我的學校項目編寫一個小網站。 我沒有實現某種的留言在我的網站,並試圖確保該才能發佈到數據庫的一些SQL注入等變量
在主頁guestbook.php我的輸入形式:
< form action="post.php" method="post">
< strong>Name:< /strong><br/> < input type="text" name="name" /><br/>
< strong>Message:< /strong><br/> < textarea name="message" rows="5"
cols="25">< /textarea><br/>
< input type="submit" value="send">
</form>
我的帖子方法PHP:
< ?php
require_once 'config.php'; (db connect)
$fields = array("name", "message");
$isOkay = TRUE;
foreach ($fields as $field) {
if (empty($_POST[$field])) {
$isOkay = FALSE;
}
}
if ($isOkay) {
extract($_POST);
$now = time();
if (mysqli_query($db_link,"insert into comments (`name`,message,`timestamp`) values ('{$name}','$message','{$now}')")) {
header("Location: guestbook.php");
} else {
echo "Can't connect to database.";
}
} else {
echo "One or more fields are empty.";
}
?>
一切正常,並得到貼到我的數據庫,但如果我現在添加一些像這樣我的代碼:
$safename = $_POST["name"];
$name = mysql_real_escape_string($safename)
$safemessage = $_POST["message"];
$message = mysql_real_escape_string($safemessage)
我試圖進入我的數據庫我的變量現在是空的... 可能是一個愚蠢的錯誤在我身邊,但有人願意幫助我在這裏?
在此先感謝:)
爲什麼這裏有空格'<?php'? - 你在這裏混合APIs! – Qirel
您已經在使用支持**準備語句的API,並且使用有界變量輸入,您應該使用帶佔位符(預準備語句)的參數化查詢來保護數據庫免受[SQL注入](http://stackoverflow.com/q/60174 /)! 開始使用['mysqli :: prepare()'](http://php.net/mysqli.prepare)和['mysqli_stmt :: bind_param()'](http://php.net/mysqli-stmt .bind-PARAM)。 – Qirel
我知道這是你項目的早期階段,我可以告訴你已經看到了潛在的問題,但是避免使用extract()和客戶端的數據。攻擊者可以添加發布的數據來設置他喜歡的任何變量。 – struthersneil