跨站点脚本数组多个结果

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>" ;

非常感谢。