31 lines
1.9 KiB
HTML
31 lines
1.9 KiB
HTML
{% extends '_task.html' %}
|
||
|
||
{% block content%}
|
||
<div class="container">
|
||
<div id="popup" onclick="hidePopup()" class="sql-guide divv">
|
||
<p class="simpletext">Это так называемая SQL-инъекция - уязвимость в системах, где отправляются SQL запросы, например регистрационные формы. <br />
|
||
<p class="simpletext">Как именно это работает? Все дело в том, что запрос отправляется без проверки на то, что пользователь туда ввёл. С использованием синтаксиса запроса можно указать себе логин 'admin', а часть с проверкой пароля просто-напросто закомментировать.</p>
|
||
<pre><code class="python">login = request.form['login']
|
||
password = request.form['pass']
|
||
cursor = get_db().cursor()
|
||
cursor.execute(f'SELECT * FROM Users WHERE login == "{login}" AND password == "{password}"')</code></pre>
|
||
<p class="simpletext">Примерно так выглядит сообтвествующий код, который позволяет использовать уязвимость</p>
|
||
</div>
|
||
|
||
<div class="divv" id="sqlInpt">
|
||
<form action="sql-injection" method="post" class="simpletext">
|
||
<div class="small-container" ><p>Login: <p class="hidden">...</p> </p> <input type="text" name="login" class="inpt" /></div>
|
||
<div class="small-container"><p>Password:</p> <input type="password" name="pass" class="inpt"/></div>
|
||
<input type="submit" value="Submit" class="btn1" />
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
{% if error %}
|
||
<div id="error"> <p>{{ error }}</p> </div>
|
||
{% elif success %}
|
||
<div id="success"> <p>{{ success }}</p> </div>
|
||
{% endif %}
|
||
|
||
{% endblock %}
|