有没有一种通用的方法可以防止表单上的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漏洞吗?有没有更好的方法?还是没有通用的方法?
- 针对 SQL 注入,您应该转义 sql 查询中使用的所有用户输入。或者使用预准备语句/绑定变量。转义:http://uk1.php.net/mysqli.real-escape-string.php,PDO:http://php.net/manual/en/ref.pdo-mysql.php
- 针对 XSS,您必须转义向客户端显示的内容。但这取决于您显示的内容和位置。您必须在 html 中使用不同的转义
- 标签之间,
- 在标记属性中
- 在 CSS 中
- 在JavaScript中
- 。
您可以在此处阅读有关XSS不同方法的更多信息:https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
我看到你只使用了array_sanitise
代码没有添加到问题中,所以很难说它是什么。但根据它的用法,它似乎是某种SQL转义,所以希望它有助于防御SQL注入。希望。