我有这个功能代码试图为GET获得更多保护。
(例如index.php?name=eval(base64_decode(EVIL+CODE))
)
global $user_ID;
if($user_ID) {
if(!current_user_can('administrator')) {
if (strlen($_SERVER['REQUEST_URI']) > 255 ||
stripos($_SERVER['REQUEST_URI'], "eval(") ||
stripos($_SERVER['REQUEST_URI'], "CONCAT") ||
stripos($_SERVER['REQUEST_URI'], "UNION+SELECT") ||
stripos($_SERVER['REQUEST_URI'], "base64")) {
@header("HTTP/1.1 414 Request-URI Too Long");
@header("Status: 414 Request-URI Too Long");
@header("Connection: Close");
@exit;
}
}
}
我可以添加什么来帮助保护POST?(尽可能 - 不可能完全密封 - 我知道)
答案 0 :(得分:1)
不是一个真正的答案,但是评论的信息太多了。
我会根据您的last comment:
在此处写下我的答案@PeeHaa我知道他们已经老了。我知道一些漏洞已得到修复。我正在运行200多个站点,其中一些可追溯到2008年,并使用插件或代码段。 (像phpthumb(旧版本))不那么安全。对不起,我不明白为什么这个问题是一个如此糟糕的问题 - 因为糟糕的方法/代码,或者为get / post添加新的安全层的想法是如此糟糕?如果是代码,那么请有人教我如何做到这一点,如果这个想法太可怕了 - 所以请解释原因。我现在所能得到的只是投票: - )
这段代码非常可怕,不应该是你应该使用的东西。只有在注释中,您才注意到要保护WP安装的事实。这是您的问题/标签中缺少的一条非常重要的信息。
无论如何声明代码非常可怕,但由于我从未使用过WP(对于可怕的代码问题),我不会判断。但我会告诉你我认为该代码的坏处:
global $user_ID;
使用global
关键字是一种坏习惯。尽可能记住新代码。现在为if
声明:
我不清楚strlen($_SERVER['REQUEST_URI']) > 255
应该阻止什么,但可能是WP或某些插件在某些时候搞砸的事实。
stripos($_SERVER['REQUEST_URI'], "eval(")
上面看起来并不奇怪,因为当你执行来自客户端的代码时这只会是一个问题(这是你永远不会做的事情(除非你使用一些非常错误的WP插件)。 ,但这也是完全错误的。 stripos()
也可能返回0
,这将是假的。因此检查可能无用。我不太了解wordpress,也不知道这样的事情是否可能:
http://your-domain/eval(insert malicious code here)
REQUEST_URI
始终以/
开头。
关于错误被压抑的那些标题的最后一件事。我怀疑它可以在the headers are already sent时防止错误。在这种情况下会发生什么。检查是否仍然有效。
你可以做的最好的事情是升级WP和插件或摆脱腐烂的插件。那将是理想的。但是,正如您所说,您有200个安装,这可能使您无法在短期内完成。所以你可能不得不排序这样的代码以“解决”任何问题。
为了在将来获得更好的答案,您可以考虑在您的问题中提供更多详细信息(例如,您试图预先设置WP安装的事实)。我认为这仍然是一个非常广泛的问题。提出特定的问题通常会更好。