在这种情况下如何使用 PHP (http://my_host_here.com/publications.php/"><script>alert(1)</script
Posted
技术标签:
【中文标题】在这种情况下如何使用 PHP (http://my_host_here.com/publications.php/"><script>alert(1)</script>) 防止 javascript?【英文标题】:how do I prevent javascript in this situation using PHP (http://my_host_here.com/publications.php/"><script>alert(1)</script>)? 【发布时间】:2013-02-11 07:47:59 【问题描述】:我已经尝试了下面的代码,但似乎在将 http 请求发送到服务器之前运行了 javascript。
谢谢
<?php
class secure
function secureSuperGlobalGET(&$value, $key)
$_GET[$key] = htmlspecialchars(stripslashes($_GET[$key]));
$_GET[$key] = str_ireplace("script", "blocked", $_GET[$key]);
$_GET[$key] = mysql_escape_string($_GET[$key]);
return $_GET[$key];
function secureSuperGlobalPOST(&$value, $key)
$_POST[$key] = htmlspecialchars(stripslashes($_POST[$key]));
$_POST[$key] = str_ireplace("script", "blocked", $_POST[$key]);
$_POST[$key] = mysql_escape_string($_POST[$key]);
return $_POST[$key];
function secureGlobals()
echo "in here";
array_walk($_GET, array($this, 'secureSuperGlobalGET'));
array_walk($_POST, array($this, 'secureSuperGlobalPOST'));
?>
【问题讨论】:
不确定您要在这里做什么。你只是把那些可怜的字符串弄得面目全非 :) 总是为了手头的任务而逃避only。你能澄清一下你在什么情况下试图阻止什么吗? 见The ultimate clean/secure function 你之后如何使用这些值?您是将它们存储在数据库中还是将它们打印给用户? 如果在请求发送到服务器之前发生了一些事情,你需要发布 HTML/Javascript 代码。 【参考方案1】:-
摆脱你的“安全”类
使用
mysql_[real_]escape_string
仅作为进入 SQL 查询的值作为带引号的字符串
任何其他 SQL 部分都必须根据其角色进行格式化。
在组装查询之前格式化 SQL 部分,而不是其他任何地方。
或更好地使用占位符
最后,回答您的问题:在回显用户提交的值时使用 htmlspecialchars()。
【讨论】:
【参考方案2】:如果 Javascript 在代码返回服务器之前运行,那么这很可能是某种形式的基于 DOM 的 XSS。 Javascript 可能会提取 /"><script>alert(1)</script>
的值并将其直接放入 DOM。您可能必须更改在客户端处理此问题的方式。
OWASP 对如何防御基于 DOM 的跨站点脚本攻击进行了精彩的概述,例如:https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet
【讨论】:
以上是关于在这种情况下如何使用 PHP (http://my_host_here.com/publications.php/"><script>alert(1)</script的主要内容,如果未能解决你的问题,请参考以下文章