ДЗ
Эксплуатация недостатков в API и GraphQL.
**Пошаговая инструкция**
Для каждого приведённого фрагмента кода выберите, к какому типу уязвимости из OWASP Top 10 API Security Risks он относится.
### 1. Фрагмент кода №1
```
app.post('/api/verify-otp', (req, res) => {
const { otp } = req.body;
if (otp === '123456') {
res.json({ success: true });
} else {
res.status(400).send('Invalid OTP');
}
});
```
Варианты ответов:
- API1:2023 - Broken Object Level Authorization
- API2:2023 - Broken Authentication
- API6:2023 - Unrestricted Access to Sensitive Business Flows
- API8:2023 - Security Misconfiguration
### 2. Фрагмент кода №2
```
@app.route('/api/user/<int:id>', methods=['GET'])
def get_user(id):
user = User.query.get(id)
return jsonify(user.to_dict())
```
Варианты ответов:
- API2:2023 - Broken Authentication
- API3:2023 - Broken Object Property Level Authorization
- API6:2023 - Unrestricted Access to Sensitive Business Flows
- API8:2023 - Security Misconfiguration
### 3. Фрагмент кода №3
```
@app.route('/api/fetch_url', methods=['GET'])
def fetch_url():
url = request.args.get('url')
try:
response = requests.get(url, timeout=5)
return jsonify({"content": response.text[:100]})
except Exception as e:
return jsonify({"error": str(e)}), 400
if __name__ == '__main__':
app.run()
```
Варианты:
- API4:2023 - Unrestricted Resource Consumption
- API5:2023 - Broken Function Level Authorization
- API6:2023 - Unrestricted Access to Sensitive Business Flows
- API7:2023 - Server Side Request Forgery
### 4. Фрагмент кода №4
```
from flask import Flask, request, jsonify
app = Flask(__name__)
votes = {"candidate_1": 0, "candidate_2": 0}
@app.route('/api/vote', methods=['POST'])
def vote():
candidate = request.json.get('candidate')
if candidate in votes:
votes[candidate] += 1
return jsonify({"status": "success", "votes": votes})
else:
return jsonify({"error": "Invalid candidate"}), 400
if __name__ == '__main__':
app.run()
```
Варианты ответов:
- API2:2023 - Broken Authentication
- API3:2023 - Broken Object Property Level Authorization
- API5:2023 - Broken Function Level Authorization
- API6:2023 - Unrestricted Access to Sensitive Business Flows
### 5. Фрагмент кода №5
```
@app.route('/api/get_user_data', methods=['GET'])
def get_user_data():
user_id = request.args.get('id')
response = requests.get(
f"https://external-api.com/users/{user_id}",
verify=False
)
return jsonify(response.json())
if __name__ == '__main__':
app.run(debug=True)
```
Варианты ответов:
- API6:2023 — Broken Function Level Authorization
- API7:2023 - Server Side Request Forgery
- API8:2023 - Security Misconfiguration
- API10:2023 - Unsafe Consumption of APIs
**Формат сдачи:** ответы на вопросы
Если у вас возникнут вопросы, вы можете обратиться к студентам в чат группы в Telegram, а также к преподавателям и наставникам в чат ДЗ в личном кабинете.