Такое решение может помочь вам.
Вы должны добавить overflow: hidden
в целом .side-nav
и отключить перенос текста в a
(или сделать flex
с min-width
)
nav {
background-color: #f5f5f5;
}
nav a {
text-decoration: none;
color: black;
}
.side-nav {
position: fixed;
top: 54px;
left: 0;
bottom: 0;
width: 5%;
display: flex;
flex-direction: column;
justify-content: space-between;
transition: width 2s;
overflow: hidden;
}
.side-nav>.side-nav-top {
display: flex;
flex-direction: column;
}
.side-nav a {
white-space: nowrap;
}
.side-nav>.side-nav-top>a>span:first-child {
display: inline-block;
margin: 5px 20px 5px 20px;
width: 20px;
}
.side-nav i {
color: #909090;
}
.side-nav:hover {
width: 40%;
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Home</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.dev.js"></script>
<link href="https://fonts.googleapis.com/css?family=Dosis" rel="stylesheet">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
<link rel="stylesheet" href="/css/index.css">
</head>
<body>
<nav class="side-nav">
<div class="side-nav-top">
<a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
<a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
<a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
<a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
<a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
<a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
<a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
<a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
<a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
<a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
</div>
</nav>
</body>
</html>
Инжекция может произойти на любом SQL-операторе, не выполненном правильно.
Например, давайте притворимся, что Ваша таблица комментария имеет два поля, целочисленный идентификатор и строку комментария. Таким образом, Вы были бы INSERT
следующим образом:
INSERT INTO COMMENTS VALUES(122,'I like this website');
Рассмотрите кого-то вводящего следующий комментарий:
'); DELETE FROM users; --
Если Вы просто помещаете строку комментария в SQL без какого-либо processesing, это могло бы повернуть Ваш сингл INSERT
в к следующим двум операторам, сопровождаемым комментарием:
INSERT INTO COMMENTS VALUES(123,''); DELETE FROM users; -- ');
Это удалило бы все из Вашего users
таблица. И существуют люди, готовые потратить весь день нахождение правильного имени таблицы к пустому методу проб и ошибок использования и различным приемам. Вот описание того, как Вы могли выполнить Атаку с использованием кода на SQL.
Необходимо использовать параметризованные SQL-операторы для предотвращения этого.
И это не только из соображений безопасности. Например, если Вы создаете свои SQL-операторы наивно следующий комментарий:
I'm just loving this website
вызвал бы ошибку синтаксиса SQL из-за апострофа, интерпретируемого SQL как заключительная кавычка.
Используйте параметризированные запросы так, чтобы текст был автоматически заключен в кавычки для Вас.
SqlCommand command = connection.CreateCommand();
command.CommandText = "insert into dbo.Table (val1,val2,txt) values (@val1,@val2,@txt)";
command.AddParameterWithValue( "val1", value1 );
command.AddParameterWithValue( "val2", value2 );
command.AddParameterWithValue( "txt", text );
...
Внедрение SQL может произойти любое время, Вы пасуете назад запрос к базе данных. Вот простая демонстрация:
Ключ, в.NET, должен сделать, поскольку Dave Webb дал. Это предотвратит инжекционную попытку путем затрагивания всей строки как одного параметра, который будет отправлен, обработки всех символов, которые могли бы быть интерпретированы SQL Server, чтобы изменить запрос или добавить дополнительные команды.
И нужно указать, что Внедрение SQL может произойти на любом приложении, не просто веб-приложениях. И что внутренняя атака является обычно самой дорогостоящей к организации. Нельзя безопасно предположить, что нападение не произойдет из.
Да, это может. Скажем, клиент отправляет это:
OR 1 = 1
Это может быть очень болезненно для Вашего
SELECT * FROM admin WHERE name = @name AND password = @password
Можно предотвратить это с
Да, они могут произойти. Самый легкий способ принять меры против этого состоит в том, чтобы использовать подготовленные операторы вместо того, чтобы создать SQL вручную.
Так, а не это:
String sql =
String.Format("INSERT INTO mytable (text_column) VALUES ( '{0}' )",
myTextBox.Text); // Unsafe!
Вы сделали бы что-то вроде этого:
String sql = "INSERT INTO mytable (text_column) VALUES ( ? )"; // Much safer
Затем добавьте текст текстового поля в качестве параметра к Вашему DbCommand, который заставит это быть автоматически оставленным и заменит"?" в SQL.
В дополнение к использованию подготовленных операторов и параметров вместо того, чтобы связать строки в Ваш SQL необходимо также сделать следующее:
Проверьте и ввод данных пользователем формата на стороне сервера. Клиентская проверка и пределы могут легко быть обходами с инструментами как WebScarab, или путем спуфинга формы.
Настройте соответствующие полномочия для учетной записи пользователя базы данных. Веб-приложение должно использовать отдельную учетную запись или роль в Вашей базе данных с полномочиями, ограниченными только таблицами, представлениями и процедурами, требуемыми запустить Ваше приложение. Удостоверьтесь, что пользователь не имеет избранных прав на системных таблицах
Скройте подробные сообщения об ошибках от пользователей и используйте менее общие названия для своих объектов. Это поражает меня, как часто можно определить тип сервера (оракул, mysql, sqlserver) и найти основную информацию о схеме в сообщении об ошибке и затем получить информацию от таблиц, названных 'пользователем (пользователями)', 'сотрудником (сотрудниками)'. Если Вы не установили свои полномочия как в (2), и я могу определить Ваш тип сервера, Вы открыты для операторов как это для SQL Server
ВЫБЕРИТЕ table_name ИЗ information_schema.table
ВЫПОЛНИТЕ sp_help foundTableName
Самый легкий способ принять меры против той формы Внедрения SQL, должен использовать параметры и хранимые процедуры, скорее затем создающие sql операторы для выполнения. (В C# или внутренне к SQL Server).
Однако я не совсем уверен, что необходимо проводить время на этом, если, конечно, это не корпоративная политика, поскольку возможности его когда-либо происходящий внутренне минимальны в лучшем случае и если бы это действительно происходило, то я надеялся бы, что Вы сразу знали бы, кто это.