我是新手,只是要清楚。我聽到很多關於逃避數據以防止XSS攻擊的信息。我該如何做到這一點?如何在PHP中跳出輸出
這是我在做什麼現在 -
$s = mysqli_real_escape_string($connect,$_POST['name']));
難道這還不夠?謝謝
我是新手,只是要清楚。我聽到很多關於逃避數據以防止XSS攻擊的信息。我該如何做到這一點?如何在PHP中跳出輸出
這是我在做什麼現在 -
$s = mysqli_real_escape_string($connect,$_POST['name']));
難道這還不夠?謝謝
如果你將數據輸出到HTML中,應該使用用htmlspecialchars() 否則,如果你存儲在數據庫中的數據,你應該使用mysqli_real_escape_string()逃脫串投下數(或使用預準備語句對於兩者) 並且通過基於白名單的過濾來保護標識符/操作符。
如果以正確的方式使用它們,這兩種方法都是您所需要的。
編輯您的答案,使其有幫助 – 2011-02-28 11:56:46
如果您剛剛開始修復您的代碼以抵禦攻擊(意思是SQL注入攻擊),那麼您將更好地檢出參數化查詢。你基本上做的是將你的內容(輸入)與命令(sql)分開,所以你不能讓它們被一個可能的用戶輸入的信息(比如名字)混淆。
您可以嘗試開始使用PDO
類: 你可以從這裏開始閱讀PDO
手冊:http://php.net/manual/en/book.pdo.php而這個頁面有一個很好的例子:http://php.net/manual/en/pdo.prepared-statements.php
<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>
不過,你不需要使用PDO
,您可以使用mysqli
也看到http://php.net/manual/en/mysqli.prepare.php
<?php
/* Script A -- We are already connected to the database */
$stmt = mysqli_prepare($link, "INSERT INTO table VALUES (?, ?, 100)"); /* Query 1 */
mysqli_stmt_bind_param($stmt, "si", $string, $integer);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt); // CLOSE $stmt
?>
因爲名字是一個單獨的值,我t永遠不會是一個SQL命令,所以你會自動安全的。
我該怎麼做?對不起,很愚蠢。 – Chrism 2011-02-28 11:47:02
爲你增加了一個例子和一些鏈接:) – Nanne 2011-02-28 11:49:28
這可以防止SQL注入攻擊,而不是XSS攻擊。 – geoffspear 2011-02-28 11:50:31
您應該使用htmlspecialchars的輸出,而不是mysqli_real_escape_string。
你需要告訴我們你在處理數據。你是否將其插入數據庫?或者在網站上輸出它?您對數據所做的每件事都需要不同形式的衛生設施。 – 2011-02-28 11:47:17
@pekoe都....在一個文件中,我接受並插入...其他...我輸出。 – Chrism 2011-02-28 11:47:57
現在考慮我要在數據庫中插入$ s。它足夠安全嗎? – Chrism 2011-02-28 11:49:55