2012-09-13 79 views
2

我们使用弹簧数据,其中的一个要点就是能够使用提供的接口(例如CrudRepository)而不必实际实现东西。弹簧数据CRUD方法

我们已经意识到,我们需要采取措施,以确保我们的应用程序:

  • 逃脱非法HTML字符,如& <>“'从输入
  • 具有对SQL注入保护

对我来说最合乎逻辑的地方似乎是在我们所有回购股份共享的通用数据库方法中的某处。但是因为它们没有在我们的代码中的任何地方实现,所以我不知道这是否是一个已经在春季数据中实现或者没有。

+0

弹簧DATA- jpa为您处理SQL注入 关于输入消毒,通常的架构是DAOs /服务/控制器,我认为输入应该被“处理”到服务中。 – 2012-09-13 06:28:54

回答

8

你似乎在这里混合两种非常不同的关注点,所以让我们来分别讨论它们:

  1. 针对SQL注入的保护是在相应的SQL-ISH弹簧数据实施中发现:JDBC或JPA;所以你不需要担心它。例如,通用API不会公开与此相关的任何内容,因为它是通用的,而且当您使用HBase时,“SQL注入”听起来很奇怪。

  2. 转义HTML的东西是一个完全不同的东西,因为它是您的表示层的关注点,而不是您的数据层。因此,您可以在验证时,在将其发送到存储库之前转义输入,或者之后希望在UI中显示存储数据时对输出进行清理。

作为一个说明,HTML只是您的数据可以作为其中一种格式提供。如果您以后需要生成JSON或CSV,则最终会在数据库中混合使用不同格式的转义符。这显然是为什么转义不是DAO层的一部分,为什么输出清理是安全的方式。

+0

谢谢,很好的答案。好的,所以虽然我们不必担心sql注入,但仍然有逃避非法HTML字符。我们的db已经包含保存的输入,其中包含非法的HTML字符我们将尝试使用db脚本来摆脱它们。至于防止非法字符的进一步输入,林不知道该怎么做。我真的不关心验证并告知用户他们在输入中有非法字符,我只是想要一个集中的方法来逃避他们。 (=识别并用字符代码重新设置它们)你有什么建议去哪里做? – fred

+0

“输出清理”意味着您不需要防止非法HTML内容进入数据库,而是需要阻止它进入浏览器。所以你可以选择存储数据,但是在渲染之前对其进行预处理。 –

+0

针对db脚本的另一个原因是:如果您以后发现其他非法字符(您在编写数据库脚本时没有考虑到),该怎么办?最终会为您的数据的几个“版本”提供几个脚本。如果您从数据库提取数据后进行清理,则可以增强该代码,而不用担心存储的数据。 –

0

为了解决您的担忧escapes illegal HTML characters such as & < > " ' from input

您应该考虑使用:

org.apache.commons.lang.StringEscapeUtils.escapeHtml(str) 
在服务层

有关此类的更多信息

,请参阅StringEscapeUtils JavaDocs