如果我在 test.php
中制作表格和form action ="<?php echo $_SERVER[PHP_self]"?>
那么它就可以被黑客攻击。我知道它可以通过htmlspecialchars()
来保护。但如果我使用 <form action ="test.php">
反而。它不会被黑客攻击。这里有什么区别?
如果我编辑 url test.php/blah blah 那么它会变成源代码中的表单操作,但当 form action="test.php"
时不会发生这种情况。 。不是同一件事吗? test.php
和$_server['PHP_self']
?
最佳答案
当您分配 <form action ="test.php">
时对于您的 HTML,此代码是静态的,无法在服务器端进行操作。如果您分配全局 $_SERVER['PHP_SELF']
,那么页面中的此条目是动态的,取决于地址栏中找到的用户 URL,使他们可以像这样操作此代码:
如果世界是一个安全且值得信赖的居住地......
浏览器网址: http://www.test.com/html/form.php
<form action="/html/index.php" method="post">
现在进入现实世界......
浏览器网址: http://test.com/form.php/%22%3E%3Cscript%3Ealert('xss')%3C
/script%3E%3Chack%22
<form action="/html/index.php/"><script>alert('xss')</script><hack"" method="post">
可以通过包围您的 $_SERVER['PHP_SELF']
来避免这种情况里面htmlspecialchars()
函数可以有效地清理脚本,如下所示:
<form action="/html/index.php/"><script>alert('xss')</script><hack"" method="post">
关于javascript - $_SERVER ['PHP_self' ] 表单中的请求无需 htmlspecialchars 即可破解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40694672/