打开Web应用程序安全项目
促进安全的软件开发面向面向Web的服务的交付主要关注"后端"而不是网络设计问题一个开放的讨论论坛任何开发团队的免费资源
它是什么?操作系统或软件?
问题很简单:何时应该在java类MessageDigest上调用reset()函数?
问题主要来自OWASP参考,在代码示例中,它们执行:
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.reset();
digest.update(salt);
byte[] input = digest.digest(password.getBytes("UTF-8"));
Run Code Online (Sandbox Code Playgroud)
然后,在一个循环中,他们做:
for (int i = 0; i < iterationNb; i++) {
digest.reset();
input = digest.digest(input);
}
Run Code Online (Sandbox Code Playgroud)
现在,对我来说,只有在摘要实例已被"更新"调用"污染"后,才会看到重置.因此,第一个样本中的那个似乎没有必要.如果有必要,是否表明MessageDigest.getInstance返回的实例不是线程安全的?
我们的团队希望更好地遵守OWASP指南,其中一项任务是防止SQL注入攻击.为了促进这一点,我一直在寻找一种方法来自动检查java.sql.Statement我们的代码库中的用法,因此可以标记并更改为使用PreparedStatement.
我们的构建过程基于Maven,我们还有Sonar设置来对项目进行分析.如果满足某些阈值,Sonar中已经存在一些规则使我们的构建失败,因此可以在那里实现.我已经看到我可以在哪里设置checkstyle regex规则来查找导入,但我想看看是否还有其他选项.
开发/构建路径上的任何位置都可以工作.如果intellij中有一些东西可以标记这个,maven构建过程中的某些东西,或者在Sonar中标记这个的不同方式,那么这些都可以.
谢谢!!
我一直在尝试评估OWASP ESAPI库,但一直有问题只是让它正确初始化.我为ESAPI.properties和validation.properties设置了一个资源文件夹,这些文件夹从类路径加载而没有问题.但是antisamy-esapi.xml文件没有从classpath加载,我发现2010年有一个提到这个的bug.我得到的错误是:
尝试通过文件I/O加载antisamy-esapi.xml作为资源文件.在'org.owasp.esapi.resources'目录中找不到或文件不可读:C:\ Users\mydir\resin-pro-4.0.27\antisamy-esapi.xml在SystemResource Directory/resourceDirectory中找不到:.esapi\antisamy -esapi.xml在'user.home'(C:\ Users\mydir)目录中找不到:C:\ Users\mydir\esapi\antisamy-esapi.xml
我正在使用这个库部署应用程序树脂.我已经尝试手动将xml文件放在上面的所有位置,唯一一个最终工作的是我的主目录,这对于生产部署来说效果不佳.
我还遵循其他地方发现的建议,即设置-Dorg.owasp.esapi.resources属性.这也没有用,但更有趣的是错误没有改变,这让我觉得设置没有因为某些原因而被选中.
有关此文件需要在我的项目中的位置的任何指针,以便在部署到容器后正确加载它?
提前致谢.
更新:
因此,通过挖掘代码,似乎存在用于加载ESAPI.properties的专用函数,这就是为什么该文件能够从部署到容器的标准资源(或任何其他src目录)目录加载的原因.但是,antisamy-esapi.xml的加载函数只检查user.home下的特定目录,配置的自定义目录,或者通过ClassLoader.getSystemResource()的结果.不确定为什么这些例程是分开的.经过几个小时的搞乱,我失去了耐心并复制了DefaultSecurityConfiguration.java并更正了getResourceFile()方法,以使用与loadConfigurationFromClasspath()相同的查找代码.然后我用这个类调用ESAPI.override(),它现在似乎正常工作.
我一直致力于我的网站(PHP)的安全性,并且有很多信息可以摄取.我试图实现我在OWASP上研究过的安全性,但有一件事我有点紧张,除其他外,还有当用户注销时如何处理SESSIONS.
目前我正在使用的是:
session_destroy();
Run Code Online (Sandbox Code Playgroud)
但是,我已经读过我应该更改XRSF令牌并启动另一个SESSION,这样它就会强制用户重新提交登录凭据,从而明确地结束用户SESSION.
是否session_destroy()足够?
编辑
我已经下载了michael-the-messenger,我认为它是由Michael Brooks(Rook)创建的,它应该非常安全,我看到了一些我可能想要使用的代码.这是否可以安全地取代session_destroy()我正在使用的东西?
码
if($_SESSION['user']->isAuth())
{
/* if they have clicked log out */
/* this will kill the session */
if($_POST['LogMeOut'] == 'true')
{
//When the user logs out the xsrf token changes.
$tmp_xsrf = $_SESSION['user']->getXsrfToken();
$_SESSION['user']->logout();
$loginMessage = str_replace($tmp_xsrf, $_SESSION['user']->getXsrfToken(), $loginMessage);
print layout('Authorization Required', $loginMessage);
}
else
{
header("Location: inbox.php");
//user is allowed access.
}
}
else
{
// code goes on ....
Run Code Online (Sandbox Code Playgroud)
登出
public …Run Code Online (Sandbox Code Playgroud) 在Web项目中,我们使用PHP中的OWASP ESAPI进行输出编码.在某些方面,我们希望允许HTML的子集用于少量格式化选项(例如,<i>和<b>),同时禁止所有其他标记和特殊字符(因此它们是使用&...;语法进行实体编码的).
我看到以下可能性来实现这一目标:
特别是,我需要以下标记和属性列入白名单:
<br><i><b><u><big><small><sub><sup><font color="..."><ul> + <li><ol> + <li>请注意,我们的应用程序具有安全性.这意味着我们要实现的任何方法都应该只接受上面的标记(可能还有一些格式化标记),其他所有方法都必须经过实体编码.通过查看代码的(简单)代码/解释,毫无疑问,这应该是容易验证的.代码越短,评论越容易.完全手工编制的编码器并不适合这种情况.
当用户在Tomcat Webapp中提交表单时,我愿意使用“ OWASP ESAPI for Java”来清理用户的输入。
我曾经这样使用org.apache.commons.lang.StringEscapeUtils:
public static String myEscapeHtml(String s)
{
String s_escapedString = null;
s_escapedString = StringEscapeUtils.escapeHtml(s);
return s_escapedString;
}
Run Code Online (Sandbox Code Playgroud)
我不知道这是否足以保护网络应用“合理地” ...
我想知道使用OWASP ESAPI应该编写哪些代码行来清理Tomcat webapp用户输入。
您能否举一个将一个或几个ESAPI“过滤器”(转义?,编码?...)应用于字符串进行净化的示例?
后端RDBMS是PostgreSQL。
Tomcat服务器可以在Linux服务器上运行,也可以在Windows服务器上运行。
感谢你并致以真诚的问候。
我想实现OWASP提到的“ JSON Sanitizer”验证。我的理解是,这需要在两个地方完成:
从客户端或其他系统接收的JSON数据(在请求中)-需要在服务器端进行清理,然后再进行处理
JSON数据(作为响应)要发送到客户端-在发送到客户端之前,需要在服务器端清除此数据
仅在该JSON数据上的JSON清理库中调用一个清理方法就足够了吗?
这将执行所有消毒处理还是在这方面进行任何其他验证?
我试图阻止开放重定向攻击.请查看下面的代码并检查安全性:
var = require('url');
// http://example.com/login?redirect=http://example.com/dashboard
app.route('/login', function (req, res, next) {
var redirect = req.query.redirect,
paths = url.parse(redirect);
if (paths.host !== req.headers.host) {
return next(new Error('Open redirect attack detected'));
}
return res.redirect(redirect);
});
Run Code Online (Sandbox Code Playgroud)
是否足以防止开放重定向攻击或是否应该添加其他内容?
由于GitHub和Twitter最近的问题:
我想知道,为什么不在客户端和服务器上同时解密密码的最佳实践?由于我不会更改已经是服务器端最佳实践的任何内容(盐,强哈希,HTTPS),因此只能更加安全。服务器将已散列的密码视为密码,并在存储之前再次对其进行散列。