Один путь состоял бы в том, чтобы записать разархивировать метод для взятия InputStreams. Затем модульный тест мог создать такой InputStream из использования массива байтов ByteArrayInputStream. Содержание того массива байтов могло быть константой в коде модульного теста.
Я более чем немного скептически отношусь к тому, что такая структура общего назначения может существовать и быть менее сложной, чем язык программирования.
слои
Также учитывайте действия при обнаружении нарушений.
Возможно, я ' не хватает твоего зрения? Вы видели что-нибудь, что приближается к тому, что вы имеете в виду?
Вы не можете использовать один метод для очистки данных для всех целей, но хорошее начало:
Фильтр Var принимает ряд различных типов данных и удаляет плохие символы (например, нецифровые для тех, что вы ожидаете быть числами), и проверяет его правильный формат (IP-адреса).
Примечание. Адреса электронной почты являются намного сложнее, чем реализация Filter_Var, поэтому поискайте нужную функцию в Google.
Я бы не советовал использовать это, пока вы не собираетесь вводить в базу данных, и, вероятно, в любом случае лучше просто использовать подготовленные операторы mysqli.
Как уже было сказано, есть несколько вещей, которые следует учитывать, когда вы беспокоитесь о веб-безопасности. Вот несколько основных принципов, которые следует учитывать:
Это означает, что не должно быть чего-то вроде $ variable = $ _POST ['user_input']
. В любой подобной ситуации вы передаете пользователю слишком много контроля. Если ввод влияет на какой-либо запрос к базе данных, всегда есть белые списки для проверки ввода пользователя. Если запрос предназначен для имени пользователя, проверьте список хороших имен пользователей. НЕ просто выполняйте запрос с вводом данных пользователем.
Одно (возможное) исключение - для строки поиска. В этом случае вам нужно продезинфицировать, все просто.
Если пользователь создает профиль или загружает информацию для других пользователей, вы должны либо иметь белый список того, какие данные допустимы, либо исключить все, что может быть злым. Это не только для безопасности вашей системы, но и для других пользователей (см. Следующий пункт.)
Это, вероятно, самая важная вещь, на которую обращали внимание консультанты по безопасности. мне. Вы не можете просто полагаться на дезинфекцию ввода, когда его получает пользователь. Если вы не писали вывод самостоятельно, всегда убедитесь, что вывод безвреден, кодируя любые символы HTML или заключая его в тег
. Это простая халатность со стороны разработчика, если пользователь A загружает фрагмент javascript, который вредит другим пользователям, просматривающим эту страницу. Вы будете спать лучше по ночам, зная, что любой пользовательский вывод не может делать ничего, кроме как отображаться в виде текста во всех браузерах.
XSS проще, чем должно быть, и настоящий боль покрыть одним абзацем. Проще говоря, всякий раз, когда вы создаете форму, вы предоставляете пользователям доступ к сценарию, который будет обрабатывать данные формы. Если я украду чью-то сессию или чей-то cookie, теперь я могу разговаривать со скриптом, как если бы я находился на странице формы. Я знаю тип ожидаемых данных и имена переменных, которые он будет искать. Я могу просто передать ему эти переменные, как если бы я был пользователем, а сценарий не мог отличить.
Вышесказанное касается не санитарии, а проверки пользователем. Мое последнее замечание напрямую связано с этой идеей.
Если я смогу украсть файл cookie пользователя, я смогу сделать больше, чем заставить этого одного пользователя пережить плохой день . Если я замечаю, что cookie имеет значение, называемое «член», я могу очень легко изменить это значение на «admin». Возможно, это не сработает, но для многих скриптов у меня будет мгновенный доступ к любой информации на уровне администратора.
Проще говоря, нет одного простого способа защитить веб-форму, но есть основные принципы, которые упрощают то, что вы должны делать это, и это облегчит стресс, связанный с защитой ваших скриптов.
Еще раз для хорошей меры: