dongzhuang6417 2014-01-19 04:29
浏览 60
已采纳

为什么htmlspecialchars在'PHP_SELF'上工作而在表单帖子上不在'REQUEST_URI'上?

I write

http://www.mysite.com/form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

on URL. Now I press enter and the URL is:

http://www.mysite.com/form.php/"><script>alert('hacked')</script>

Now I post the form. When using $_SERVER['PHP_SELF'], htmlspecialchars works, with REQUEST_URI not. Why?

When and why should I use action="" or action=<?=$_SERVER['PHP_SELF']?> or action=<?=$_SERVER['REQUEST_URI']?>?

Here the result of the posts:

$_SERVER['REQUEST_URI']:
  /form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

htmlspecialchars($_SERVER['REQUEST_URI']):
  /form.php/%22%3E%3Cscript%3Ealert(&#039;hacked&#039;)%3C/script%3E

$_SERVER['PHP_SELF']:
  /form.php/"><script>alert('hacked')</script>

htmlspecialchars($_SERVER['REQUEST_URI']):
  /form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;

I think, the second should also be as the last...?

  • 写回答

1条回答 默认 最新

  • douhuan1380 2014-01-19 08:08
    关注

    It sounds like you're confusing htmlspecialchars with urlencode.

    htmlspecialchars replaces characters with special meaning in HTML with &-escaped entities. So, for example, ' becomes &#039;. It doesn't turn %22 into &quot;, however, because %22 has no special meaning in HTML, so it's safe to display it without modification.

    urlencode replaces characters with special meaning in URLs with hexadecimal character codes using %. So, for example, " becomes %22.

    If you want a form to be handled by the same URL that is used to display it, always use action="" rather than action=<?=$_SERVER['PHP_SELF']?> or action=<?=$_SERVER['REQUEST_URI']?>. As you've already figured out, there are serious risks of cross-site scripting (XSS) if you use either of the $_SERVER variables, because they contain user input and therefore cannot be trusted. So, unless you have a good reason that you need to tweak the URL somehow, just use action="".

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解
  • ¥15 有偿请教计算电磁学的问题涉及到空间中时域UTD和FDTD算法结合的
  • ¥15 three.js添加后处理以后模型锯齿化严重