
安全编码准则是如何演变的
上周,我正在研究Java Spring的漏洞,以使我们的安全编码准则达到最新水平。我浏览了我们平台上现有的挑战,并注意到一些关于通过在JSP页面显示url参数的XSS。不正确的代码例子看起来类似于下面的内容。
<input type="text" name="username" value="${param.username}">
正确的解决方案是完全删除URL参数,描述中提到,以正确的方式转义URL参数也是安全的。
现在,我的工作是以一种让开发者清楚的方式来制定安全编码准则,并在编写安全代码的同时尽可能地限制他们。在这种情况下,我更愿意让开发人员保留他们的预期功能,并建议他们通过转义URL参数来实现安全的功能。这样一来,代码就不再包含XSS漏洞。上面的例子可以这样来保证安全。
<input type="text" name="username" value="${fn:escapeXml(param.username)}">
这就是我们几天来的安全编码准则,直到我偶然发现了一个关于表达式语言注入的OWASP页面。这个页面描述了Spring表达式语言(SpEL)如何被滥用于注入,并产生一些严重的影响,包括远程代码执行。我想弄清楚,在某些情况下,遵守我们安全编码准则的代码仍然会受到这个漏洞的影响。所以我写了一个快速测试程序来评估SpEL表达式,并测试了有无Xml转义的输入,看看是否能找到一些不会被发现的情况。我做到了,有一些恶意的表达式不包含任何被XmlEscape捕获的字符。我在我们的github上发布了工作演示,你可以在这里找到。
当然,我还更新了我们的安全编码准则,现在的内容是。"不要使用Spring表达式语言(SpEL)显示或评估URL参数"。
这个问题的总体影响是高,原因如下。 - 攻击者可以修改和调用应用服务器上的功能。- 对数据和功能的未经授权的访问,以及账户劫持和远程代码执行。- 保密性,以及成功攻击带来的完整性问题。
https://www.owasp.org/index.php/Expression_Language_Injection


上周,我正在研究Java Spring的漏洞,以使我们的安全编码准则达到最新水平。我浏览了我们平台上现有的挑战,并注意到一些关于通过在JSP页面显示url参数的XSS。不正确的代码例子看起来类似于下面的内容。
<input type="text" name="username" value="${param.username}">
正确的解决方案是完全删除URL参数,描述中提到,以正确的方式转义URL参数也是安全的。
现在,我的工作是以一种让开发者清楚的方式来制定安全编码准则,并在编写安全代码的同时尽可能地限制他们。在这种情况下,我更愿意让开发人员保留他们的预期功能,并建议他们通过转义URL参数来实现安全的功能。这样一来,代码就不再包含XSS漏洞。上面的例子可以这样来保证安全。
<input type="text" name="username" value="${fn:escapeXml(param.username)}">
这就是我们几天来的安全编码准则,直到我偶然发现了一个关于表达式语言注入的OWASP页面。这个页面描述了Spring表达式语言(SpEL)如何被滥用于注入,并产生一些严重的影响,包括远程代码执行。我想弄清楚,在某些情况下,遵守我们安全编码准则的代码仍然会受到这个漏洞的影响。所以我写了一个快速测试程序来评估SpEL表达式,并测试了有无Xml转义的输入,看看是否能找到一些不会被发现的情况。我做到了,有一些恶意的表达式不包含任何被XmlEscape捕获的字符。我在我们的github上发布了工作演示,你可以在这里找到。
当然,我还更新了我们的安全编码准则,现在的内容是。"不要使用Spring表达式语言(SpEL)显示或评估URL参数"。
这个问题的总体影响是高,原因如下。 - 攻击者可以修改和调用应用服务器上的功能。- 对数据和功能的未经授权的访问,以及账户劫持和远程代码执行。- 保密性,以及成功攻击带来的完整性问题。
https://www.owasp.org/index.php/Expression_Language_Injection

上周,我正在研究Java Spring的漏洞,以使我们的安全编码准则达到最新水平。我浏览了我们平台上现有的挑战,并注意到一些关于通过在JSP页面显示url参数的XSS。不正确的代码例子看起来类似于下面的内容。
<input type="text" name="username" value="${param.username}">
正确的解决方案是完全删除URL参数,描述中提到,以正确的方式转义URL参数也是安全的。
现在,我的工作是以一种让开发者清楚的方式来制定安全编码准则,并在编写安全代码的同时尽可能地限制他们。在这种情况下,我更愿意让开发人员保留他们的预期功能,并建议他们通过转义URL参数来实现安全的功能。这样一来,代码就不再包含XSS漏洞。上面的例子可以这样来保证安全。
<input type="text" name="username" value="${fn:escapeXml(param.username)}">
这就是我们几天来的安全编码准则,直到我偶然发现了一个关于表达式语言注入的OWASP页面。这个页面描述了Spring表达式语言(SpEL)如何被滥用于注入,并产生一些严重的影响,包括远程代码执行。我想弄清楚,在某些情况下,遵守我们安全编码准则的代码仍然会受到这个漏洞的影响。所以我写了一个快速测试程序来评估SpEL表达式,并测试了有无Xml转义的输入,看看是否能找到一些不会被发现的情况。我做到了,有一些恶意的表达式不包含任何被XmlEscape捕获的字符。我在我们的github上发布了工作演示,你可以在这里找到。
当然,我还更新了我们的安全编码准则,现在的内容是。"不要使用Spring表达式语言(SpEL)显示或评估URL参数"。
这个问题的总体影响是高,原因如下。 - 攻击者可以修改和调用应用服务器上的功能。- 对数据和功能的未经授权的访问,以及账户劫持和远程代码执行。- 保密性,以及成功攻击带来的完整性问题。
https://www.owasp.org/index.php/Expression_Language_Injection
上周,我正在研究Java Spring的漏洞,以使我们的安全编码准则达到最新水平。我浏览了我们平台上现有的挑战,并注意到一些关于通过在JSP页面显示url参数的XSS。不正确的代码例子看起来类似于下面的内容。
<input type="text" name="username" value="${param.username}">
正确的解决方案是完全删除URL参数,描述中提到,以正确的方式转义URL参数也是安全的。
现在,我的工作是以一种让开发者清楚的方式来制定安全编码准则,并在编写安全代码的同时尽可能地限制他们。在这种情况下,我更愿意让开发人员保留他们的预期功能,并建议他们通过转义URL参数来实现安全的功能。这样一来,代码就不再包含XSS漏洞。上面的例子可以这样来保证安全。
<input type="text" name="username" value="${fn:escapeXml(param.username)}">
这就是我们几天来的安全编码准则,直到我偶然发现了一个关于表达式语言注入的OWASP页面。这个页面描述了Spring表达式语言(SpEL)如何被滥用于注入,并产生一些严重的影响,包括远程代码执行。我想弄清楚,在某些情况下,遵守我们安全编码准则的代码仍然会受到这个漏洞的影响。所以我写了一个快速测试程序来评估SpEL表达式,并测试了有无Xml转义的输入,看看是否能找到一些不会被发现的情况。我做到了,有一些恶意的表达式不包含任何被XmlEscape捕获的字符。我在我们的github上发布了工作演示,你可以在这里找到。
当然,我还更新了我们的安全编码准则,现在的内容是。"不要使用Spring表达式语言(SpEL)显示或评估URL参数"。
这个问题的总体影响是高,原因如下。 - 攻击者可以修改和调用应用服务器上的功能。- 对数据和功能的未经授权的访问,以及账户劫持和远程代码执行。- 保密性,以及成功攻击带来的完整性问题。
https://www.owasp.org/index.php/Expression_Language_Injection
资源
Secure Code Warrior corporate overview
Secure Code Warrior is an AI Software Governance platform designed to enable organizations to safely adopt AI-driven development by bridging the gap between development velocity and enterprise security. The platform addresses the "Visibility Gap," where security teams often lack insights into shadow AI coding tools and the origins of production code.
安全代码培训主题和内容
Our industry-leading content is always evolving to fit the ever changing software development landscape with your role in mind. Topics covering everything from AI to XQuery Injection, offered for a variety of roles from Architects and Engineers to Product Managers and QA. Get a sneak peek of what our content catalog has to offer by topic and role.
资源
Observe and Secure the ADLC: A Four-Point Framework for CISOs and Development Teams Using AI
While development teams look to make the most of GenAI’s undeniable benefits, we’d like to propose a four-point foundational framework that will allow security leaders to deploy AI coding tools and agents with a higher, more relevant standard of security best practices. It details exactly what enterprises can do to ensure safe, secure code development right now, and as agentic AI becomes an even bigger factor in the future.







