2014-12-27 69 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