2014-12-27 67 views
0

是否有一種通用的方法來阻止表單上的XSS?XSS表單安全

是我們考慮下面的基本示例代碼...

HTML:

<form action="test.php" method="POST"> 
<input type="text" name="test"> 
</form> 

PHP:

function new_test($test) { 
    array_walk($test, 'array_sanitise'); 

    $fields = '`' . implode('`, `', array_keys($test)) . '`'; 
    $data = '\'' . implode('\', \'', $test) . '\''; 

    $query = mysql_query("INSERT INTO `test` ($fields) VALUES ($data)"); 
    if (!$query) { 
     die('Could not query:' . mysql_error()); 
    } 
} 

$test = array(
    'test'  => $_POST['test'] 
); 

new_test($test); 

難道這還不夠,從SQL注入& XSS漏洞,以保護?有沒有更好的方法來做到這一點?還是沒有通用的方法?

+0

無論何時您需要提出多個問題,您的問題很可能過於寬泛。針對PHP XSS參考問題關閉。對於SQL注入,請教你自己http://bobby-tables.com/ - 是的,你的代碼很容易SQL注入。 [如何防止PHP中的SQL注入?](http://stackoverflow.com/q/60174/367456) – hakre

+0

mysql_函數已棄用,請使用[mysqli](http://php.net/manual/en /book.mysqli.php)或[PDO](http://php.net/manual/tr/book.pdo.php)而不是mysql_函數。 – salep

回答

2
  1. 針對SQL注入,您應該轉義sql查詢中使用的所有用戶輸入。或者使用預準備的語句/綁定變量。轉義:http://uk1.php.net/mysqli.real-escape-string.php,PDO:http://php.net/manual/en/ref.pdo-mysql.php
  2. 針對XSS,您必須逃避向客戶展示的內容。但這取決於你展示的內容和位置。你必須在HTML
    • 標籤之間使用不同的轉義,
    • 在標籤中的CSS屬性
    • 在JavaScript
    • ...

你可以閱讀更多關於這裏XSS的不同方法:https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

我看到你只用了array_sanitise其代碼沒有添加到問題中,所以很難說這是什麼。但基於它的用法,它似乎是某種SQL轉義,所以希望它有助於抵禦SQL注入。希望。

+0

謝謝! \t function array_sanitise(&$ item){ \t \t $ item = htmlentities(strip_tags(mysql_real_escape_string($ item))); \t} – Alex