我想知道这两个选项中哪一个更安全:
#define MAXLEN 255
char buff[MAXLEN + 1]
Run Code Online (Sandbox Code Playgroud)
sprintf(buff, "%.*s", MAXLEN, name)
snprintf(buff, MAXLEN, "%s", name)
我的理解是两者都是一样的.请建议.
#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)
我理解它的方式,上面的代码允许任意代码(或程序)执行 - 什么使这个易受攻击,以及如何利用这一点?
如何存储敏感数据(例如:密码)std::string?
我有一个应用程序,提示用户输入密码,并在连接设置期间将其传递给下游服务器.我想在建立连接后安全地清除密码值.
如果我将密码存储为char *数组,我可以使用SecureZeroMemory等 API 来清除进程内存中的敏感数据.但是,我想在代码中避免使用char数组,并且正在寻找类似的东西std::string?
是否有任何的标准库的方法,可以筛选出的路径,其中包括特殊遍历序列,如../和向上目录遍历所有其他回旋形式,从遍历维护文件路径API输入向上给定的"根"的路径?
我有一个包含根文件夹值成员的类,以及一个接受递归删除路径的成员函数.我的目标是使这个API安全,过滤掉提供给它的任何输入路径 - 这将转换为根文件夹值以上的路径.目的是这个类将被广泛用于删除根路径下的文件,但它永远不会触及根路径上的任何东西.
这类似于更广泛的路径遍历攻击.
方法太多的限制(即可能导致假阴性)可能是罚款,我的具体使用情况,如果此简化了的事情,而且,我目前的需求是文件系统路径不是网络的人(虽然,对于相当于一个Web模块在理论上可以在这里工作).
我正在寻找C++中安全编码实践的全面记录.由于我还没有在这里找到这样的列表,我们不妨把它变成社区维基,以供进一步参考.我正在寻找安全问题的解决方案,如基于堆栈和堆的缓冲区溢出和下溢,整数溢出和下溢,格式字符串攻击,空指针解除引用,堆/内存检查攻击等.
注意:除了编码实践之外,还可以提到防御这类攻击的安全库.
LE:正如MSalters在评论中所建议的那样,这个问题被分成两个单独的问题,一个用于C++,一个用于C.另请参阅Secure C编码实践.
我在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_user和mysql.default_password.在哪种情况下我们必须这样做?
或者我怎样才能从别人那里获得价值?
我正在寻找C语言中安全编码实践的全面记录.由于我还没有找到这样的列表,我们不妨将其变成社区维基,以供进一步参考.我正在寻找安全问题的解决方案,如基于堆栈和堆的缓冲区溢出和下溢,整数溢出和下溢,格式字符串攻击,空指针解除引用,堆/内存检查攻击等.
注意:除了编码实践之外,还可以提到防御这类攻击的安全库.
LE:正如本问题中所见,安全C++编码实践,但仅适用于C语言.
我想在POSIX shell(/bin/sh)中创建一个临时文件.
我发现mktemp(1)在我的AIX盒存在好好尝试一下,并根据如何便携式是mktemp的(1)?,无论如何,它不是那么便携和/或安全.
那么,我应该使用什么呢?
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) 我在一家生产多个应用程序的公司工作,并非所有这些应用程序都具有相同的签名,或者更像是我们暂时拥有至少5-6个应用程序证书.
我们尝试创建一种机制,其中同一设备上的所有公司应用程序共享相同的内容,例如,如果用户从市场App A安装并且未安装应用程序,则会生成新ID,如果现在他安装App A,应用B应该与App A具有相同的ID(id只是生成的UUID类型#4)等...
我们目前正在使用广播,只有获得我们许可的应用才能接收该广播,并通过另一次广播发送回来(这次是明确的).广播和响应受到我们的签名级别的保护,这当然没有帮助,因为我们有多个签名.
我试图编写一个意图广播和恢复,它可以拥有自己的保护机制,不仅限于一个签名,而是几个,问题是像Binder.getSenderUID()这样的东西不能用于广播,我得到了我的自己的uid.看起来我无法获得我的snder的身份,除非他自己在意图中写了他的id,这不是我可以信任的东西,因为它可以很容易伪造.使用加密需要应用程序附带一个密钥,这不再是安全的,转向服务器进行验证需要花费太多时间,并且在移动设备上不能保证成功,因为不是100%确定有网络.
任何人都知道如何从一个应用程序到另一个应用程序获得验证\安全消息?(我的所有应用程序,但可能有不同的签名).