标签: secure-coding

哪个sprintf/snprintf更安全?

我想知道这两个选项中哪一个更安全:

#define MAXLEN 255
char buff[MAXLEN + 1]
Run Code Online (Sandbox Code Playgroud)
  1. sprintf(buff, "%.*s", MAXLEN, name)

  2. snprintf(buff, MAXLEN, "%s", name)

我的理解是两者都是一样的.请建议.

c unix security printf secure-coding

40
推荐指数
6
解决办法
6万
查看次数

这个C代码容易受到什么影响?

#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdio.h>

int main(int argc, char **argv, char **envp)
{
    gid_t gid;
    uid_t uid;
    gid = getegid();
    uid = geteuid();

    setresgid(gid, gid, gid);
    setresuid(uid, uid, uid);

    system("/usr/bin/env echo and now what?");

}
Run Code Online (Sandbox Code Playgroud)

我理解它的方式,上面的代码允许任意代码(或程序)执行 - 什么使这个易受攻击,以及如何利用这一点?

c linux security exploit secure-coding

34
推荐指数
1
解决办法
1万
查看次数

如何安全地清除std :: string?

如何存储敏感数据(例如:密码)std::string

我有一个应用程序,提示用户输入密码,并在连接设置期间将其传递给下游服务器.我想在建立连接后安全地清除密码值.

如果我将密码存储为char *数组,我可以使用SecureZeroMemory等 API 来清除进程内存中的敏感数据.但是,我想在代码中避免使用char数组,并且正在寻找类似的东西std::string

c++ string passwords secure-coding

17
推荐指数
3
解决办法
7852
查看次数

在Java(或Scala)中过滤向上路径遍历

是否有任何的标准库的方法,可以筛选出的路径,其中包括特殊遍历序列,如../和向上目录遍历所有其他回旋形式,从遍历维护文件路径API输入向上给定的"根"的路径?

我有一个包含根文件夹值成员的类,以及一个接受递归删除路径的成员函数.我的目标是使这个API安全,过滤掉提供给它的任何输入路径 - 这将转换为根文件夹值以上的路径.目的是这个类将被广泛用于删除根路径下的文件,但它永远不会触及根路径上的任何东西.

这类似于更广泛的路径遍历攻击.

方法太多的限制(即可能导致假阴性)可能是罚款,我的具体使用情况,如果此简化了的事情,而且,我目前的需求是文件系统路径不是网络的人(虽然,对于相当于一个Web模块在理论上可以在这里工作).

java owasp secure-coding path-traversal

13
推荐指数
2
解决办法
5929
查看次数

安全的C++编码实践

我正在寻找C++中安全编码实践的全面记录.由于我还没有在这里找到这样的列表,我们不妨把它变成社区维基,以供进一步参考.我正在寻找安全问题的解决方案,如基于堆栈和堆的缓冲区溢出和下溢,整数溢出和下溢,格式字符串攻击,空指针解除引用,堆/内存检查攻击等.

注意:除了编码实践之外,还可以提到防御这类攻击的安全库.

LE:正如MSalters在评论中所建议的那样,这个问题被分成两个单独的问题,一个用于C++,一个用于C.另请参阅Secure C编码实践.

c++ security secure-coding

10
推荐指数
1
解决办法
7301
查看次数

如何在项目中保护数据库配置文件?

我在php文件上创建了与数据库服务器建立连接.在这个文件中,我使用的mysql_connect()功能与我的数据库服务器的参数主机,用户名和密码.

public class DatabaseConnect
{
function __construct()
{
    mysql_connect('localhost','username','password') or die('Could not connect to mysql server.');
    mysql_select_db('databasename');
}

}
Run Code Online (Sandbox Code Playgroud)

现在在这种情况下,其他人可以看到用户名和密码.

我找到了另一种确保价值的方法,即mysql.default_usermysql.default_password.在哪种情况下我们必须这样做?

或者我怎样才能从别人那里获得价值?

php mysql secure-coding

10
推荐指数
2
解决办法
3万
查看次数

安全C编码实践

我正在寻找C语言中安全编码实践的全面记录.由于我还没有找到这样的列表,我们不妨将其变成社区维基,以供进一步参考.我正在寻找安全问题的解决方案,如基于堆栈和堆的缓冲区溢出和下溢,整数溢出和下溢,格式字符串攻击,空指针解除引用,堆/内存检查攻击等.

注意:除了编码实践之外,还可以提到防御这类攻击的安全库.

LE:正如本问题中所见,安全C++编码实践,但仅适用于C语言.

c security secure-coding

8
推荐指数
1
解决办法
3737
查看次数

如何以安全的方式创建带有便携式shell的临时文件?

我想在POSIX shell(/bin/sh)中创建一个临时文件.

我发现mktemp(1)在我的AIX盒存在好好尝试一下,并根据如何便携式是mktemp的(1)?,无论如何,它不是那么便携和/或安全.

那么,我应该使用什么呢?

shell portability posix temporary-files secure-coding

8
推荐指数
1
解决办法
2499
查看次数

checkmarx - 如何解决存储绝对路径遍历问题?

Checkmarx - v 9.3.0 HF11

我将 env 值作为数据目录路径传递到 dev/uat 服务器中使用的 docker 文件中

ENV DATA /app/data/
Run Code Online (Sandbox Code Playgroud)

在本地,使用以下环境变量

数据=C:\projects\app\data\

getDataDirectory("MyDirectoryName"); // MyDirectoryName 存在于数据文件夹中

public String getDataDirectory(String dirName)
{
    String path = System.getenv("DATA");
    if (path != null) {
        path = sanitizePathValue(path);
        path = encodePath(path);

        dirName = sanitizePathValue(dirName);
        if (!path.endsWith(File.separator)) {
            path = path + File.separator;
        } else if (!path.contains("data")) {
            throw new MyRuntimeException("Data Directory path is incorrect");
        }
    } else {
        return null;
    }

    File file = new File(dirName); // NOSONAR

    if (!file.isAbsolute()) …
Run Code Online (Sandbox Code Playgroud)

java security secure-coding docker checkmarx

8
推荐指数
1
解决办法
4350
查看次数

android:验证意图发件人的身份

我在一家生产多个应用程序的公司工作,并非所有这些应用程序都具有相同的签名,或者更像是我们暂时拥有至少5-6个应用程序证书.

我们尝试创建一种机制,其中同一设备上的所有公司应用程序共享相同的内容,例如,如果用户从市场App A安装并且未安装应用程序,则会生成新ID,如果现在他安装App A,应用B应该与App A具有相同的ID(id只是生成的UUID类型#4)等...

我们目前正在使用广播,只有获得我们许可的应用才能接收该广播,并通过另一次广播发送回来(这次是明确的).广播和响应受到我们的签名级别的保护,这当然没有帮助,因为我们有多个签名.

我试图编写一个意图广播和恢复,它可以拥有自己的保护机制,不仅限于一个签名,而是几个,问题是像Binder.getSenderUID()这样的东西不能用于广播,我得到了我的自己的uid.看起来我无法获得我的snder的身份,除非他自己在意图中写了他的id,这不是我可以信任的东西,因为它可以很容易伪造.使用加密需要应用程序附带一个密钥,这不再是安全的,转向服务器进行验证需要花费太多时间,并且在移动设备上不能保证成功,因为不是100%确定有网络.

任何人都知道如何从一个应用程序到另一个应用程序获得验证\安全消息?(我的所有应用程序,但可能有不同的签名).

android broadcastreceiver android-intent secure-coding

7
推荐指数
2
解决办法
4932
查看次数