小编cpu*_*uer的帖子

为什么许多服务器改变其uid和gid,有什么好处?

我在许多开源项目中看到了这样的逻辑:

if (setuid() == 0) {
   if (setgid(ccf->group) == -1) {
   ...
   if (initgroups(ccf->username, ccf->group) == -1) {
Run Code Online (Sandbox Code Playgroud)

我有2个问题:

  1. 改变另一个gid和uid的好处是什么?
  2. 什么是initgroups为了?IMO,改变GID和UID,setuid()以及setgid()就足够了.

c unix security

6
推荐指数
1
解决办法
563
查看次数

所以malloc不会调用任何系统调用?

相关代码:

  write(-1, "test", sizeof("test"));
  void * p = malloc(1024);
  void * p2 = malloc(510);
  write(-1, "hi", sizeof("hi"));
Run Code Online (Sandbox Code Playgroud)

相关strace输出:

write(4294967295, "test\0", 5)          = -1 EBADF (Bad file descriptor)
brk(0)                                  = 0x601000
brk(0x622000)                           = 0x622000
write(4294967295, "hi\0", 3)            = -1 EBADF (Bad file descriptor)
Run Code Online (Sandbox Code Playgroud)

我很惊讶这种低级操作不涉及系统调用?

malloc system-calls

6
推荐指数
2
解决办法
4536
查看次数

什么是程序休息?从哪里开始,0x00?

int brk(void *end_data_segment);
void *sbrk(intptr_t increment);
Run Code Online (Sandbox Code Playgroud)

以增量0调用sbrk()可用于查找程序中断的当前位置.

什么是程序休息?从哪里开始,0x00?

c memory-management brk

6
推荐指数
2
解决办法
4144
查看次数

什么是\ 363\353\377\377\377\177?

(gdb) p (char*)0x7fffffffe9c8
$16 = 0x7fffffffe9c8 "\363\353\377\377\377\177"
Run Code Online (Sandbox Code Playgroud)

它看起来不像ascii或multibyte,那是什么?

c gdb

5
推荐指数
2
解决办法
9794
查看次数

PHP免疫"HTTP响应拆分"漏洞吗?

<?php
setcookie('test', "test\r\n<script>alert(1)</script>");
echo 1;
Run Code Online (Sandbox Code Playgroud)

但事实证明PHP自动执行编码:

Set-Cookie: test=test%0D%0A%3Cscript%3Ealert%281%29%3C%2Fscript%3E
Run Code Online (Sandbox Code Playgroud)

这是否意味着在PHP中重现HTTP响应拆分是不可能的?

php security exploit http-headers

5
推荐指数
1
解决办法
1859
查看次数

为什么更新时间对于像nginx这样的Web服务器如此重要?

在此输入图像描述

正如您所看到的,每次收到信号时,nginx都会首先出现update time,为什么timeWeb服务器会有大问题?

time webserver nginx

5
推荐指数
1
解决办法
174
查看次数

什么时候用c/c ++命令分号?

if(...) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中看来a ;是可选的,什么时候}在c/c ++中需要后用分号?

c c++ syntax

5
推荐指数
2
解决办法
8456
查看次数

STDIN_FILENO 和 STDOUT_FILENO 在 c 中是只读的吗?

fd = open("/dev/null", O_RDWR);
if (fd == -1) {
    ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
                  "open(\"/dev/null\") failed");
    return NGX_ERROR;
}

if (dup2(fd, STDIN_FILENO) == -1) {
    ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "dup2(STDIN) failed");
    return NGX_ERROR;
}

if (dup2(fd, STDOUT_FILENO) == -1) {
    ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "dup2(STDOUT) failed");
    return NGX_ERROR;
}


if (fd > STDERR_FILENO) {
    if (close(fd) == -1) {
        ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "close() failed");
        return NGX_ERROR;
    }
}
Run Code Online (Sandbox Code Playgroud)

man告诉我dup2() makes newfd be the copy of oldfd, closing newfd first if necessary.: …

c unix file-descriptor dup2

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

c 中的全局静态/非静态变量是如何被破坏的?

我可以想象var一个函数内的静态变量func被命名为var@func

全局静态和非静态变量呢?

c name-mangling

2
推荐指数
1
解决办法
1871
查看次数

在同一台机器,信号或插座上进行进程间通信,如何决定?

在我看来,这两个signalsocket可用于这项工作,

你如何决定实际使用哪一个?

c sockets signals ipc

0
推荐指数
1
解决办法
1156
查看次数