【问题标题】:PHP Sanitize Url from Address Bar [duplicate]PHP从地址栏中清理网址[重复]
【发布时间】:2013-06-08 11:53:15
【问题描述】:

如何从地址栏中获取 url 并尝试对其进行清理以防止跨端脚本?

例如在这个链接中,

www.somesite.com/login/login.php 

如何防止它发生

www.somesite.com/login/login.php/"><h2>This%20is%20our%20cookie<h2>         
<script>document.write%28document.cookie%29</script></h2>

我是否使用 $_SERVER 从地址栏中获取 url,那么我应该使用什么来清理链接?

谢谢。

【问题讨论】:

  • 你在混合一些东西。 (客户端浏览器的)地址栏只能由客户端本身访问,您只能通过 javascript 代码访问它。此外,$_SERVER 是一个服务器端变量,可用于服务器端 php 脚本,与客户端 javascript 无关。
  • 您提供的示例并不是真正的安全威胁。问题是当您使用数据并执行诸如将其插入数据库之类的操作时...这是您需要清理数据的地方.否则,让他们输入任何他们想要的东西,它不会伤害任何人。
  • 这毫无意义。您不能“清理地址栏”,句号。更好地解释你有什么顾虑。在此之前,我建议您对 XSS 或您试图预防的问题了解不足,并担心错误的事情。
  • 首先,@Jamie 正在寻找一种方法来防止跨脚本攻击。这就是为什么他们询问许多困惑的回答者/评论者的原因。 “重复”问题确实包含抽象的答案,恕我直言,不合适。

标签: php mysql


【解决方案1】:

获取方式可以参考$_SERVER['REQUEST_URI']

如果要将其附加到 HTML,请使用 htmlspecialchars() 对其进行转义。

【讨论】:

  • 不,我不想将它附加到 HTML。我希望防止在网址末尾添加不需要的字符串或字符。
  • @Jamie,我不确定我是否理解...您想阻止用户在浏览器的地址栏中写入某些字符?如果是这样,那是不可能的。一种想法是检查服务器端的 URL,删除那里所有不需要的字符并重定向。
  • 你好。很抱歉没有正确解释。我试图清理 .php 扩展名之后的任何内容。
【解决方案2】:

网址

$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']

查看此链接了解详情

http://www.phpeasystep.com/phptu/27.html

如摆脱所说,你可以使用消毒

htmlspecialchars() (http://ca3.php.net/htmlspecialchars)

相反,您可以使用http://php.net/manual/en/function.preg-replace.php 来清理您收到的 $url,通过使用它您可以删除 .php 之后的任何内容,方法是使用空字符串替换那些。

也请看看这篇文章。

Removing unwanted characters from URL in htaccess

【讨论】:

    【解决方案3】:

    如果您想在服务器端清理 url,请使用 mysql_escape_string($_SERVER['REQUEST_URI'])。更重要的是,使用var_dump($_SERVER) 查看您可以使用的所有值并使用它们。顺便说一句,你为什么要清理 URL?你想用它做什么?我假设您想将其放入数据库中,但是如果您只想从中删除所有 html 代码,浏览器已经进行了转义,因此您实际上不需要这样做...

    如果您想在客户端对其进行清理,那将毫无意义,因为攻击者始终可以使用自己的工具生成自己的 http 请求,甚至不用浏览器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-07
      • 2015-11-09
      • 1970-01-01
      • 2016-10-29
      • 2018-12-23
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      相关资源
      最近更新 更多