我使用带有codeiniter的mode_rewrite来获取url,例如:
/controller/param1/param2
大多数时候,param1和param2将是来自数据库的ID(换句话说是数字),而不是其他任何内容。
问题是,我可以做些什么以及应该做些什么来保护它免受潜在的黑客攻击?我应该使用html净化器,还是有更好的方法,还是需要做某事?
我真的很擅长安全和保护,我刚刚听说过html净化器,我宁愿不像初学者那样在任何地方使用它。
我应该只是preg_match()?
如果preg_match()是soluton,expresiion只接受数值(ID值)?
答案 0 :(得分:2)
在您的配置文件中,您可以找到
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-+';
你不需要使用preg匹配,因为它已经在Codeigniter中完成,另一方面我会建议验证只有合适的人才能访问此链接 例如,如果项目ID未显示为只读用户等,您可以通过在控制器中进行某些检查后进行路由或重定向来处理此问题
但是我的安全性不是很好,但到目前为止我所知道的答案 1 :(得分:0)
如果这不是一个特定于编码的问题,而是一般如何擦除用户输入,那么一个简单的解决方案就是逃避&在提交SQL之前引用该值。
这样的东西可以工作(警告:未经测试的PHP代码):
function escapeAndQuoteValue($value, $forceQuote = false) {
if (is_null($value)) {
$escapedString = 'NULL';
} elseif (is_bool($value)) {
$escapedString = $value ? 'TRUE' : 'FALSE';
} elseif (isDigits($value) && $value[0] != '0') {
$escapedString = $value; //return ints verbatim -- unless it has a leading zero
} else {
$escapedString = pg_escape_string($value);
}
$quoteString =
$forceQuote ||
is_null($value) ||
is_bool($value) ||
(isDigits($value) && $value[0] != '0');
return $quoteString ? "'$escapedString'" : $escapedString;
}