Quero montar um site baseado em php + mysql, com uso de Phpmyadmin.
Não uso Apache. Não tenho acesso ao arquivo php.ini do meu host, já que é compartilhado.
O host mantém as seguintes opções (pertinentes ao meu tópico):
magic_quotes : ON
safe_mode: OFF
Além disso, usa a tecnologia Zend - que pelas minhas pesquisas - é um serviço de encripitação do código fonte php (corrijam-me se estiver errada).
E estou preocupada com o quesito segurança, já que esse site será aberto para um grande número de visitantes. Por isso, gostaria de tirar algumas dúvidas asobre as medidas que tomei e pretendo tomar:
01) Fechar a conexão com o comando mysql_close(); realmente aumenta a segurança?
02) Como utilizar em um formulário, um filtro de html que permita apenas algumas tags (como: <b>,<br>,<strike>,<u>,<p>...) e barre outras tags html e scripts maliciosos (como a inserção de javascripts) e, além disso, manter a proteção contra sql injection simultaneamente - atualmente uso esta para injection:
function escape_string ($string) { if(version_compare(phpversion(),"4.3.0")=="-1") { mysql_escape_string($string); } else { mysql_real_escape_string($string); } } $title = escape_string($_POST["title"]);03) No caso de query strings que pega IDs númericos a partir do GET, a utilização de int ($id = int($_GET["id"]);), como abaixo, é suficiente para evitar que utilizem da query para incluir sites externos ou visualizar arquivos importantes do meu servidor?
04) Em um script de login para a minha área de administração que conteria páginas como (Novidades.php, Postar_novidades.php, Processa_Postar.php <- esta última seria apenas a parte que processaria o formulário), como o login deve ser feito? No caso de sessions em que as senhas e os usuários NÃO estejam em um banco de dados e que só há acesso para um usuário - eu -, o "código de restrição" nas páginas protegidas deveria ser colocado na página de processamento do formulário, na página do formulário ou em ambos?
05) A apresentação de erros pode ser manipulada sem o acesso e manipulação do php.ini?
06) Este tipo de login, que capta a própria senha do db, é mais seguro/inseguro que o uso de sessions?
<? /* Check for values in $PHP_AUTH_USER and $PHP_AUTH_PW */ if ((!isset($PHP_AUTH_USER)) || (!isset($PHP_AUTH_PW))) { /* No values: send headers causing dialog box to appear */ header('WWW-Authenticate: Basic realm="My Private Stuff"'); header('HTTP/1.0 401 Unauthorized'); echo 'Authorization Required.'; exit; } else if ((isset($PHP_AUTH_USER)) && (isset($PHP_AUTH_PW))){ /* Values contain some values, so check to see if they're correct */ if (($PHP_AUTH_USER != "validname") || ($PHP_AUTH_PW != "goodpassword")) { /* If either the username entered is incorrect, or the password entered is incorrect, send the headers causing dialog box to appear */ header('WWW-Authenticate: Basic realm="My Private Stuff"'); header('HTTP/1.0 401 Unauthorized'); echo 'Authorization Required.'; exit; } else if (($PHP_AUTH_USER == "validname") || ($PHP_AUTH_PW == "goodpassword")) { /* if both values are correct, print success message */ echo "<P>You're authorized!</p>"; } }
De qualquer, obrigada pela ajuda.
