我开始研究软件安全性,但我很难理解缓冲区溢出攻击和 ROP 攻击是什么。
据我了解,
缓冲区溢出攻击:
当缓冲区达到一定大小时,填充缓冲区并添加额外的代码,以便攻击者可以执行代码中的另一个函数或他/她自己的shellcode。
ROP攻击:
给出某个可以覆盖返回地址的输入,以便攻击者可以控制流量。
但两者之间的确切区别是什么?
我觉得两者都只是给出了过多的输入来覆盖不应该接近的区域。
例如,如果我有一个代码
1 #include <stdio.h>
2
3 void check(){
4 printf("overflow occurs!\n");
5 }
6
7 int main(int argc, char* argv[]){
8 char buffer[256];
9 gets(buffer);
10 printf("%s\n", buffer);
11 return 0;
12 }
Run Code Online (Sandbox Code Playgroud)
并尝试check()
通过向函数提供特定输入来执行该函数gets()
。
这是 ROP 攻击还是缓冲区溢出攻击?
我编写了一个使用 openssl 的程序,并对其进行了 dockerized。
但是当我用 python:3.7 基本图像尝试它时,出现了以下错误:
[SSL: DH_KEY_TOO_SMALL] dh 密钥太小 (_ssl.c:1108)
我设法通过降低/etc/ssl/openssl.cnf
文件中的安全级别来解决这个问题。
echo "CipherString=DEFAULT@SECLEVEL=1" >> /etc/ssl/openssl.cnf
但是这个错误到底是什么意思?
这是一个服务器端问题,我无法在我的代码中处理吗?
我只是觉得通过降低安全级别来解决问题不太舒服。
更改该安全级别时应该考虑什么?
谢谢 :)
当使用CMD ["python3", "./mycode.py"]
.
现在,我想要的是每分钟运行该 python 代码。
之前的 Dockerfile(只需运行一次):
FROM python:3.7
RUN apt-get update && \
apt-get install cron -y
RUN pip3 install requests
RUN head -n -1 /etc/ssl/openssl.cnf > /etc/ssl/temp && \
mv /etc/ssl/temp /etc/ssl/openssl.cnf
RUN echo "CipherString=DEFAULT@SECLEVEL=1" >> /etc/ssl/openssl.cnf
COPY . /app
WORKDIR /app
CMD ["python3", "./mycode.py"]
Run Code Online (Sandbox Code Playgroud)
之后的 Dockerfile(使用 crontab 每分钟运行一次):
FROM python:3.7
RUN apt-get update && \
apt-get install cron -y
RUN pip3 install requests
RUN head -n -1 /etc/ssl/openssl.cnf > /etc/ssl/temp && \
mv /etc/ssl/temp …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将Django项目连接到AWS S3。
settings.py包含以下内容:
AWS_ACCESS_KEY_ID = #ID
AWS_SECRET_ACCESS_KEY = #Key
AWS_STORAGE_BUCKET_NAME = #Bucket
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'static'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'backend/static'),
]
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
Run Code Online (Sandbox Code Playgroud)
使用AmazonS3FullAccess创建IAM用户。 但是当我输入:
python manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)
发生错误:
您已请求按照设置中的指定在目标位置收集静态文件。
这将覆盖现有文件!你确定你要这么做吗?
键入“是”以继续,或键入“否”以取消:是回溯(最近一次调用最后一次):在execute_from_command_line(sys.argv)中的文件“ manage.py”,第22行,文件“ / home / seokchan / server / mdocker” /lib/python3.5/site-packages/django/core/management/ init .py“,第381行,位于execute_from_command_line utility.execute()文件“ /home/seokchan/server/mdocker/lib/python3.5/site”中-packages / django / core / management / init“ .py”,行375,在执行self.fetch_command(subcommand).run_from_argv(self.argv)文件“ /home/seokchan/server/mdocker/lib/python3.5/site-packages/django/core/management/base”中.py“,第316行,位于run_from_argv self.execute(* args,** cmd_options)文件” /home/seokchan/server/mdocker/lib/python3.5/site-packages/django/core/management/base.py “,第353行,在执行输出= …
我正在研究Web,并对Django,Apache和AWS的概念感到困惑。
我有使用Django和AWS开发Web后端的经验。
Django处理了Web浏览器和服务器之间的交互。
AWS使客户端能够共享相同的服务器和数据。
但是,什么是Apache?在开发过程中没有考虑这一点。
根据我的研究,Apache是Web服务器应用程序。
但是,我无法说出它与AWS的确切区别。
AWS是否包括Apache?
请帮助我确定什么是Apache。谢谢 :)
String prvKey = "-----BEGIN PRIVATE KEY-----\n"
+ "........\n"
+ "-----END PRIVATE KEY-----";
Jwts.builder()
.setClaims(jwtClaim)
.signWith(SignatureAlgorithm.RS256, prvKey)
.compact();
Run Code Online (Sandbox Code Playgroud)
Running this Java code prints
java.lang.IllegalArgumentException: Base64-encoded key bytes may only be specified for HMAC signatures. If using RSA or Elliptic Curve, use the signWith(SignatureAlgorithm, Key) method instead.
当我将RS256更改为HS256签名时,令牌生成良好,但我的目标服务器只接受RS256签名令牌,所以我必须使用RS256。
错误日志对我没有帮助,因为我已经在使用signWith(SignatureAlgorithm, Key)
方法了。
我该如何解决这个问题?
任何评论、链接都值得赞赏。