XSS的SQL预防

问题描述 投票:0回答:2

大家好,我有一个问题,在向SQL插入数据以防止XSS时,我可以使用某些东西吗?而不是阅读时。

例如,我从用户生成的sql中获得了相当多的输出,是否可以在输入SQL时使其安全,还是在离开SQL时使其安全?

TL:DR在向SQL插入数据以防止XSS时可以使用htmlspecialchars之类的东西,这会是一种很好的保护吗?

php html security xss
2个回答
1
投票

我认为问题中有几处混淆。

通过输入验证防止XSS

通常您无法通过输入验证来阻止XSS,但在非常特殊的情况下,您可以仅针对严格的数字验证输入,例如数字。

考虑此html页面(假设<?=用于以服务器端语言将数据插入到html中,因为您暗示了PHP,当然会因所使用的语言而异):

<script>
    var myVar = <?= var1 ?>;
</script>

在这种情况下,服务器上的var1不需要具有any特殊字符,仅字母就足以注入javascript。对于攻击者而言,这是否有用取决于几件事,但从技术上讲,几乎可以通过任何输入验证对XSS进行攻击。当然,这样的分配当前可能不在您的Javascript中,但是您将如何确保永远不会存在?

另一个例子显然是DOM XSS,输入从未到达服务器,但这是另一回事。

防止XSS是输出编码。输入验证在某些情况下可能会有所帮助,但在大多数情况下将无法提供足够的保护。

存储编码值

通常将HTML编码的值存储在数据库中不是一个好主意。一方面,它使搜索,排序以及任何类型的处理变得更加麻烦。另一方面,它违反了单一责任和关注点分离。编码是一种视图级别的事情,您的后端数据库与您要如何显示该数据无关。当您考虑不同的编码时,甚至会更加强调。仅当您要将数据写入HTML上下文时,HTML编码才可以。如果是javascript(在脚本标签中,或在on *属性(如onclick)或其他几个地方)中,则html编码是不够的,更不用说在您有更多特殊输出的地方了。您的数据库不需要知道,数据将在哪里使用,它是输出的东西,因此,它应该由视图处理。


0
投票

例如,您应该使用正则表达式测试输入的白名单字符,使其仅接受[a-Z] [0-9]之类的字符。如果您尝试使用黑名单进行另一种尝试,您会头疼不已,因为存在大量利用输入并捕获所有输入的巨大方法,这是个大问题

此外,请注意SqlInjections。您应该在Linux上使用SqlMap来测试您的网站是否易受攻击]

© www.soinside.com 2019 - 2024. All rights reserved.