0

你好 StackOverflow 的可爱的人们,

我建立了一个应用程序来存储电影,所以我可以在以后搜索它们。一切正常,但我试图防止 XSS,我查看了 W3School htmlspecialchars,但我遇到的问题是我正在返回多个字段结果,例如 s“关键字”“类别”“保存日期”“网站”。

我可以只在一个字段上阻止 XSS,但其余字段不返回任何数据。

这是从数据库中回显数据的代码:

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

希望我已经正确解释了我的问题。

谢谢

4

2 回答 2

0

这是对“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>" ;

太感谢了。

于 2016-02-17T12:56:26.517 回答
0

我想我理解你的问题,但我不知道为什么你只能逃避一个结果。

你可以做:

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 标记 ($results['Website']) 中注入的 URL,您的脚本仍然容易受到攻击。

通过设置“javascript:alert(123);” 作为您的 URL,您仍然可以执行 JavaScript。您需要验证 URL 是否以 http:// 或 https:// 开头。

于 2016-01-12T10:10:37.427 回答