Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据积垢方法_Java_Spring_Spring Data - Fatal编程技术网

Java Spring数据积垢方法

Java Spring数据积垢方法,java,spring,spring-data,Java,Spring,Spring Data,我们使用spring数据,其要点是能够只使用提供的接口(例如Crudepository),而不必实际实现 我们已经意识到,我们需要采取措施确保我们的应用程序: 从输入中转义非法的HTML字符,如&“ 具有针对sql注入的保护 对我来说,最符合逻辑的地方似乎是在我们所有回购协议共享的通用db方法中的某个较高位置。但是,由于它们没有在我们的代码中的任何地方实现,我不知道这是否已经在spring数据中实现了。您似乎在这里混合了两个非常不同的关注点,所以让我们分别讨论它们: 针对SQL注入的保护可以

我们使用spring数据,其要点是能够只使用提供的接口(例如Crudepository),而不必实际实现

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

  • 从输入中转义非法的HTML字符,如&<>“
  • 具有针对sql注入的保护

对我来说,最符合逻辑的地方似乎是在我们所有回购协议共享的通用db方法中的某个较高位置。但是,由于它们没有在我们的代码中的任何地方实现,我不知道这是否已经在spring数据中实现了。

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

  • 针对SQL注入的保护可以在相应的SQL ish spring数据实现中找到:JDBC或JPA;因此您不必担心它。通用API不会公开与此相关的任何内容,因为它是通用的,例如,当您使用HBase时,“SQL注入”听起来非常奇怪

  • 转义HTML内容是一件完全不同的事情,因为它是表示层的问题,而不是数据层的问题。因此,您可以在验证时转义输入,然后再将其发送到存储库,或者在以后要在UI中显示存储的数据时对输出进行清理


  • 需要注意的是,HTML只是您的数据可以作为的格式之一。如果您以后还需要生成JSON或CSV,您将在数据库中混合不同格式的转义。这就是为什么转义不是DAO层的一部分以及为什么输出清理是安全的方法的一个明显原因。

    为了解决您的问题ns about
    从输入中转义非法HTML字符,如&<>“

    <>你应该考虑使用:

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


    有关这个类的更多信息,请参见

    spring data jpa为您处理SQL注入,关于输入清理,通常的体系结构是DAOs/Services/Controllers,我认为应该将输入“处理”到服务中。谢谢,回答得很好。好的,虽然我们不必担心sql注入,但仍然存在转义的非法HTML字符。我们的数据库已经包含包含非法HTML字符的已保存输入。我们将尝试使用db脚本来摆脱它们。至于防止进一步输入非法字符,我不知道该在哪里做。我真的不在乎验证和通知用户他们的输入中有非法字符,我只想要一个可以逃避这些字符的集中式方法。(=用字符代码识别并重新放置它们)您有什么建议吗?“输出清理”意味着您不需要阻止非法HTML内容进入数据库,而是需要阻止它进入浏览器。因此,您可以选择按原样存储数据,但在渲染之前先对其进行预处理。针对db脚本的另一个原因是:如果稍后发现其他非法字符(在编写db脚本时您没有考虑到这一点),该怎么办。最终,您将获得多个数据“版本”的多个脚本。如果您在从DB中提取后对其进行清理,则该代码可以得到增强,而不必担心存储的数据。至于将该代码放置在何处,我建议使用UI层(MVC的控制器),除非这不仅仅是一个表示问题,而是一个硬业务需求。在后一种情况下,服务层最适合这种代码。