跨站点脚本数组多个结果
Cross Site Scripting Array Multiple Results
你好可爱的 Whosebug 人,
我构建了一个应用程序来存储电影,以便以后搜索它们。一切正常,但我试图防止 XSS,我查看了 W3School htmlspecialchars,但我 运行 遇到的问题是我 returning 多个字段结果,例如 s"keywords"“类别”"Date Saved""Website"。
我只能在一个字段上防止 XSS,但其余字段不会 return 任何数据。
这是从数据库中回显数据的代码:
echo "<tr align='center' bgcolor='#0f7ea3'>
<td height='25px'>"
.$results['Website']."</td>
<td>".$results['Keywords']."</td>
<td>".$results['Category']."</td>
<td>".$results['Date Saved']."</td>
<td> <a href='" . $results['Website'] . "'>Click To Access Your Link</a></td>
</tr>" ;
希望我已经正确解释了我的问题。
谢谢
我想我明白你的问题,但我不知道你为什么只能逃避一个结果。
你可以这样做:
echo "<tr align='center' bgcolor='#0f7ea3'>
<td height='25px'>"
.htmlspecialchars($results['Website'], ENT_QUOTES)."</td>
<td>".htmlspecialchars($results['Keywords'], ENT_QUOTES)."</td>
<td>".htmlspecialchars($results['Category'], ENT_QUOTES)."</td>
<td>".htmlspecialchars(.$results['Date Saved'], ENT_QUOTES)."</td>
<td> <a href='" . htmlspecialchars($results['Website'], ENT_QUOTES) . "'>Click To Access Your Link</a></td>
</tr>" ;
这通过在回显中注入 JavaScript 来防止 XSS。另请注意,我在 htmlspecialchars 函数中使用了 ENT_QUOTES 标志。这会转义双引号和单引号,因为默认情况下它们不会转义。
但是,如果您不验证可以在 href 标记中注入的 URL ($results['Website']),您的脚本仍然容易受到攻击。
通过将 "javascript:alert(123);" 设置为您的 URL,您仍然可以执行 JavaScript。您需要验证 URL 是否以 http:// 或 https:// 开头。
这是对 "nobody"
提供的建议的更新
除了“.”位置外,所提供的代码是准确的。除此之外,代码运行完美。
建议:
<td>"htmlspecialchars(.$results['Date Saved'], ENT_QUOTES)."</td>
正确代码:
<td>".htmlspecialchars($results['Date Saved'], ENT_QUOTES)."</td>
完整的工作代码:
echo "<tr align='center' bgcolor='#0f7ea3'>
<td height='25px'>"
.htmlspecialchars($results['Website'], ENT_QUOTES)."</td>
<td>".htmlspecialchars($results['Keywords'], ENT_QUOTES)."</td>
<td>".htmlspecialchars($results['Category'], ENT_QUOTES)."</td>
<td>".htmlspecialchars($results['Date Saved'], ENT_QUOTES)."</td>
<td> <a href='" . htmlspecialchars($results['Website'], ENT_QUOTES) . "'>Click To Access Your Link</a></td>
</tr>" ;
非常感谢。
你好可爱的 Whosebug 人,
我构建了一个应用程序来存储电影,以便以后搜索它们。一切正常,但我试图防止 XSS,我查看了 W3School htmlspecialchars,但我 运行 遇到的问题是我 returning 多个字段结果,例如 s"keywords"“类别”"Date Saved""Website"。
我只能在一个字段上防止 XSS,但其余字段不会 return 任何数据。
这是从数据库中回显数据的代码:
echo "<tr align='center' bgcolor='#0f7ea3'>
<td height='25px'>"
.$results['Website']."</td>
<td>".$results['Keywords']."</td>
<td>".$results['Category']."</td>
<td>".$results['Date Saved']."</td>
<td> <a href='" . $results['Website'] . "'>Click To Access Your Link</a></td>
</tr>" ;
希望我已经正确解释了我的问题。
谢谢
我想我明白你的问题,但我不知道你为什么只能逃避一个结果。
你可以这样做:
echo "<tr align='center' bgcolor='#0f7ea3'>
<td height='25px'>"
.htmlspecialchars($results['Website'], ENT_QUOTES)."</td>
<td>".htmlspecialchars($results['Keywords'], ENT_QUOTES)."</td>
<td>".htmlspecialchars($results['Category'], ENT_QUOTES)."</td>
<td>".htmlspecialchars(.$results['Date Saved'], ENT_QUOTES)."</td>
<td> <a href='" . htmlspecialchars($results['Website'], ENT_QUOTES) . "'>Click To Access Your Link</a></td>
</tr>" ;
这通过在回显中注入 JavaScript 来防止 XSS。另请注意,我在 htmlspecialchars 函数中使用了 ENT_QUOTES 标志。这会转义双引号和单引号,因为默认情况下它们不会转义。
但是,如果您不验证可以在 href 标记中注入的 URL ($results['Website']),您的脚本仍然容易受到攻击。
通过将 "javascript:alert(123);" 设置为您的 URL,您仍然可以执行 JavaScript。您需要验证 URL 是否以 http:// 或 https:// 开头。
这是对 "nobody"
提供的建议的更新除了“.”位置外,所提供的代码是准确的。除此之外,代码运行完美。
建议:
<td>"htmlspecialchars(.$results['Date Saved'], ENT_QUOTES)."</td>
正确代码:
<td>".htmlspecialchars($results['Date Saved'], ENT_QUOTES)."</td>
完整的工作代码:
echo "<tr align='center' bgcolor='#0f7ea3'>
<td height='25px'>"
.htmlspecialchars($results['Website'], ENT_QUOTES)."</td>
<td>".htmlspecialchars($results['Keywords'], ENT_QUOTES)."</td>
<td>".htmlspecialchars($results['Category'], ENT_QUOTES)."</td>
<td>".htmlspecialchars($results['Date Saved'], ENT_QUOTES)."</td>
<td> <a href='" . htmlspecialchars($results['Website'], ENT_QUOTES) . "'>Click To Access Your Link</a></td>
</tr>" ;
非常感谢。