htmlspecialchars()和之间有什么区别htmlentities()?我什么时候应该使用其中一种?
我现在一直在网上打猎几天试图解决这个问题,但得到了相互矛盾的答案.
是否有PHP的库,类或函数可以安全地清理/编码针对XSS的字符串?它需要定期更新以应对新的攻击.
我有几个用例:
用例1)我有一个纯文本字段,比如名字或姓氏
我想我可以做trim(),strip_tags()然后使用Sanitize过滤器或带有白名单字符的RegEx.他们真的需要像这样的人物!和?或者< >以他们的名义,不是真的.
用例2)当从先前保存的数据库记录(或从先前提交的表单)输出内容到View/HTML时,我想彻底清除它以用于XSS.注意:它可能已经或可能没有经过用例1中的过滤步骤,因为它可能是不同类型的输入,因此假设没有进行消毒.
最初我虽然HTMLPurifier会做这个工作,但是当我向他们的支持提出问题时,它似乎不是我需要的:
这是试金石:如果用户提交
<b>foo</b>它应该显示为<b>foo</b>或foo?如果是前者,则不需要HTML Purifier.
所以我宁愿它出现,<b>foo</b>因为我不希望为简单的文本字段或任何执行的JavaScript显示任何HTML.
所以我一直在寻找能够为我做这一切的功能.我偶然发现了Kohana 3.0使用的xss_clean方法,我猜它是有效的,但只有当你想保留HTML时才会这样.它现在已经从Kohana 3.1中弃用,因为它们已经用HTMLPurifier取代了它.所以我猜你应该做的HTML::chars()只是做这个代码:
public static function chars($value, $double_encode = TRUE)
{
return htmlspecialchars( (string) $value, ENT_QUOTES, Kohana::$charset, $double_encode);
}
Run Code Online (Sandbox Code Playgroud)
现在显然你应该使用htmlentities而不是像Stack Overflow中的很多地方所提到的那样,因为它比htmlspecialchars更安全.
我有一个php的网站,包括()将内容嵌入到模板中.要加载的页面在get参数中给出,我将".php"添加到参数的末尾并包含该页面.我需要做一些安全检查以避免XSS或其他东西(不是mysql注入,因为我们没有数据库).我想出的是以下内容.
$page = $_GET['page'];
if(!strpos(strtolower($page), 'http') || !strpos($page, '/') ||
!strpos($page, '\\') || !strpos($page, '..')) {
//append ".php" to $page and include the page
Run Code Online (Sandbox Code Playgroud)
我还能做些什么来进一步消毒我的输入吗?
我正在学习 XSS(出于道德目的),我想知道如何在不使用<script>标签的情况下执行一些 JavaScript 代码。这是在
HTML 标签:
"The search term" <p> *JavaScript here* </p> "returned no results"
Run Code Online (Sandbox Code Playgroud)
由于某种原因,脚本标签不起作用。
我正在处理如下所示的php代码,其中在特定字数限制后添加了省略号(...)。
<?php
$programs = array();
foreach ( $xml_files as $file ) {
$xml = simplexml_load_file($src_dir."/".$file) or die('Unable to load XML');
$path_title_en = $xml->xpath('//StringAssetInfo[attrName="CASE_EPISODE_TITLE"]/value');
$path_description_en = $xml->xpath('//TextAssetInfo[attrName="CASE_DESCRIPTION_ENGLISH"]/value');
$programs[] = array( "episode_title" => (string)$path_title_en,
"description" => (string)$path_description_en;
}
$program["episode_title"] = substr($program["episode_title"],0,50).' <a href="">(...)</a>'; /* ellipsis is added after a particular word limit */
$program["description"] = substr($program["description"],0,100).' <a href="">(...)</a>'; /* ellipsis is added after a particular word limit */
?>
<table>
<tr>
<td style="width:8%; text-align:center;"><?php echo $program["episode_title"]; ?></td> /* Line A …Run Code Online (Sandbox Code Playgroud) <?php
echo $_GET['id'];
?>
Run Code Online (Sandbox Code Playgroud)
对我来说看起来不太安全.. 显示GET元素的最佳选择是什么?
像preg_replace所有特殊字符上的a 一样,或者htmlspecialchars?
关于PHP中的数据插入,我有一个问题.
在我的网站上有一个消息系统.
因此,当我的收件箱加载时,它会提供一个JavaScript警报.
我在我的网站上搜索了很多,最后我发现有人给我发了一条信息,上面有文字.
<script>
alert(5)
</script>
Run Code Online (Sandbox Code Playgroud)
那么如何限制插入数据库的脚本代码呢?
我正在运行PHP.
我尝试在通过 URL 传递参数时删除特殊字符,以避免被入侵者注入,例如我有以下 URL:
www.sitename.com/people?job=manager
Run Code Online (Sandbox Code Playgroud)
我alert在参数后面添加了一个脚本,如下所示:
www.sitename.com/people?job=manager"/><script>alert%2844749%29<%2fscript>
Run Code Online (Sandbox Code Playgroud)
当我运行该 URL 时,将alert弹出,这可能会导致通过此技术检索站点信息时出现漏洞。我将使用$_REQUEST获取传递参数来生成结果。我可以在下面应用这种方法来逃避 URL 注入技术吗?
$job = $_REQUEST["job"];
Run Code Online (Sandbox Code Playgroud)
谢谢你的建议。
我有这个PHP代码,我的CMS安全自动测试说这是一个XSS攻击.为什么以及如何解决此问题?
$url = "news.php";
if (isset($_GET['id']))
$url .= "?id=".$_GET["id"];
echo "<a href='{$url}'>News</a>";
Run Code Online (Sandbox Code Playgroud) 我有一个网页,其中有多个页面都有html表单.但是我受到了不属于该领域的奇怪数据的轰炸.例:
\'\"><svg/onload=(new(Image)).src=\'//rytk88vs0h2tc4yierrvrpgr2i8lwdm1eo8cx\\56burpcollaborator.net\
Run Code Online (Sandbox Code Playgroud)
但这应该是一个
<select><option></option></select>
Run Code Online (Sandbox Code Playgroud)
它不是文本输入字段.那么这个人如何提交奇怪的代码呢?我怎么能阻止这个?
php ×9
html ×3
javascript ×3
xss ×3
sanitization ×2
security ×2
css ×1
database ×1
escaping ×1
filtering ×1
forms ×1
modal-dialog ×1