segunda-feira, 7 de dezembro de 2015

PHP, IIS e MySQL juntos na rede caseira

IIS Internet Information Server 7, incluído no Windows 7
PHP 7.0.0
MySQL 5.7.9

Instalar MySQL

Baixar MySQL

http://dev.mysql.com/downloads/mysql/
Escolhi installer on line (dá para 32/64 bit).
download Windows (x86,32-bit), MySQL Installer MSI (mysql-installer-web-community-5.7.9.0.msi)

Instalar MySQL

só seguir padrão proposto do instalador
sem alterar pasta de instalação (default)
Develolper Default
type and Networking:
Config Type: Development Machine (default)
TCP/IP port Number: 3306 (default)
digitar 2 vezes senha root, não adicionar usuário agora
Configure MySQL Server as a Windows Service checado (default)
Windows Service Name: MySQL57 (default)
Start the MySQL Server at System Startup checado (default)
Standard System Accout selecionado (default)
clicar Execute

Uso de gerenciador de MySQL

Particularmente uso gerenciador HeidiSQL.
Só baixar e instalar, pode criar uma nova conexão 'local server' e conectar root e senha digitada na instalação MySQL.
Pode utilizar qualquer gerenciador ou não utilizar.

Acessar MySQL do servidor de outro computador remoto na rede privada caseira

liberar firewall

Controle Panel - System and Security - Windows Firewall - Allow a program through Windows Firewall
verificar se está checada MySQL57 da coluna Home/Work(Private), e quando clicar Details... a porta 3306 TCP está aberta

Criar um usuário não root que possa conectar de qualquer computador da rede privada

conectar MySQL root
grant all privileges on *.* to nomeDoUsuario@"192.168.0.%" identified by 'senhaDoUsuario' with grant option;
Precisa MySQL e/ou gerenciador instalado no outro computador remoto.

Acessar serviço web do servidor de outro computador na rede privada

abrir firewall para serviço web da rede privada
Controle Panel - System and Security - Windows Firewall - Allow a program through Windows Firewall
Clicar Change Settings
checar World Wide Web Services (HTTP) e também na coluna Home/Work(Private) -> OK

Testar tudo junto

Criar database e tabela MySQL para teste

CREATE DATABASE jantar;
USE jantar;
CREATE TABLE alimento (
 id INT UNSIGNED NOT NULL,
 nome VARCHAR(20) NOT NULL,
 PRIMARY KEY (id)
);
INSERT INTO alimento (id, nome) VALUES 
 (1, 'arroz'),
 (2, 'feijao');

Criar página PHP para teste

http://php.net/manual/en/pdo.connections.php
mostra código que pode testar conexão.
salvar como teste.php, e colocar na pasta inetpub\wwwroot
<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=jantar', 'root',
        'senhaRoot');
    foreach($dbh->query('SELECT * from alimento') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
?>

Testar no próprio servidor

acessar http://localhost/test.php no browser e ver se mostra conteúdo da tabela.

Testar da outra máquina da rede privada

verificar endereço IP do servidor
Network and Sharing Center - Local Area Connection - Details... e anotar IPv4 Address (ex. 192.168.0.15)
digitar http://192.168.0.15/test.php no browser e ver se mostra conteúdo da tabela.

PHP com IIS

IIS Internet Information Server 7, incluído no Windows 7
PHP 7.0.0
MySQL 5.7.9

Fiz teste do conjunto IIS, PHP, MySQL num computador Windows 7.
Coloco no público que possa ajudar quem tenta sozinho o mesmo trilho, alem de me servir como anotação de instalação quando preciso lembrar.

Ativar IIS

IIS Internet Information Server 7 vem com Windows 7, só precisa ativar.

Passos

Control Panel - Programs and Features - Turn Windows features on or off
Na janela Windows Features:
checar Internet Information Services -> tornar quadrado azul
clicar sinal plus para chegar e checar World Wide Web Services - Application Development Features - CGI

Teste

Entrar o endereço http://localhost no browser e ver a tela IIS7, está OK

Instalar PHP

Baixar PHP

http://windows.php.net/download/
download VC14 x64 Non Thread Safe (2015-Dec-03 20:07:24) Zip [22.79MB]
Escolhi dentro de muitas opções por ser 64bis e usar IIS.

Instalar PHP

só criar uma nova pasta c:\php70 e extrair dentro o arquivo .zip
copiar php.ini-production com novo nome php.ini na mesma pasta c:\php70

editar php.ini

editar o conteúdo de php.ini utilizando o próprio modelo
fastcgi.impersonate = 1 (tirat ; )
fastcgi.logging = 0 (tirat ; )
cgi.fix_pathinfo = 1 (tirat ; )
cgi.force_redirect = 0 (tirat ; e mudar valor)

extension_dir = "ext" (tirar ; )
extension=php_mysqli.dll (tirar ; )
extension=php_pdo_mysql.dll (tirar ; )
doc_root = C:\inetpub\wwwroot (lugar padrão IIS)

Teste

rodar php-cgi.exe na pasta c:\php70
Apareceu uma mensagem de erro que acusa falta VCRUNTIME140.dll
observar http://stackoverflow.com/questions/30811668/php7-missing-vcruntime140-dll
chegar a página https://www.microsoft.com/en-us/download/details.aspx?id=48145
e download Visual C++ Redistributable for Visual Studio 2015 e instalar
rodar php-cgi.exe na pasta c:\php70
Se abrir uma janela terminal prompt, o teste está OK, pode fechar apertando Ctrl + C

Configuração permissão de acesso

abrir propriedade da pasta php70
php70 Properties - aba Security
clicar Edit
clicar Add...
location = nome deste computador
digitar iis_iusrs e clicar Check Names -> aprarecer nome do objeto -> clicar OK
clicar OK sem alterar permissões padrão propostas

Cadastrar PHP runtime no IIS

Win + R -> digitar inetmgr -> clicar OK
clicar duplo Handler Mappings na janela [nomeDoComputador] Home, Features View
clicar Add Module Mapping... na janela Actions
Request path: *.php
Module: FastCgiModule
Executable: C:\php70\php-cgi.exe
Name: PHP_via_FastCGI
clicar Request Restrictions...
checar Invoke handler only if request is mapped to: na aba Mapping
selecionar File or folder
clicar OK -> OK -> Yes

Teste PHP com IIS

criar um novo arquivo com o conteúdo:
<?php  phpinfo();  ?>
e salvar como info.php
copiar este na pasta C:\inetpub\wwwroot
acessar http://localhost/info.php e se aparecer a tela da PHP está OK

sábado, 20 de dezembro de 2014

Tão destrutivo, como injeção SQL

Precisa muita atenção em digitação de números, especificamente NÃO BATER PONTO E VÍRGULA (;).

Eu uso MySQL 5.0.27 com HeidiSQL 9.1.0.4867.

Com HeidiSQL pode inserir novo registro ou alterar registro existente com maneira intuitiva como trabalhando com uma planilha.

O desastre aconteceu quando queria alterar um valor de um campo para '-1,42' (notação da lingua portuguesa) onde devia digitar '-1.42' utilizando ponto em lugar de vírgula.

O procedimento correto em HeidiSQL é
  1. selecionar o campo da tabela
  2. apertar a tecla F2 para colocar o campo em modo de edição
  3. digitar '-1.42'
  4. apertar Enter para sair do modo de edição
  5. apertar Ctrl + Enter para efetuar alteração do registro

O problema aconteceu assim.
No passo 3 foi digitado, sem querer e perceber, '-1;42'
No passo 5 o programa mostrou uma mensagem de erro e a alteração não foi executada.
Se tivesse só alteração não efetuada, não teria nenhum arrepio que senti após o momento do erro.

Todos os valores desta coluna foi modificado em -1 (um negativo), sim TODOS sem nenhuma exceção.
A COLUNA INTEIRA COM MAIS DE MIL REGISTROS SOFREU ARRASTÃO QUE ARRASOU HORAS DE TRABALHO DEIXANDO LIXO DE DADOS.
Tentei entender o que aconteceu, procurei informações na janela inferior onde HeidiSQL mostra as operações executadas como um log.
E descobri uma parte que explica o acontecimento.

UPDATE `vendas` SET `vr_pedra`=-1;42 WHERE `trato_id`=1401 AND `caixa_id`=0;
/* SQL Error (1064) in statement #2: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '42 WHERE `trato_id`=1401 AND `caixa_id`=0' at line 1 */

Se tivesse digitado corretamente acontecia:
UPDATE `vendas` SET `vr_pedra`=-1.42 WHERE `trato_id`=1401 AND `caixa_id`=0;
Esta tabela 'vendas' tem duas colunas de chave primária, 'trato_id' e 'caixa_id' que identifica registro único.

Ponto e vírgula significa fim de uma sentença de SQL.

Com uma troca de ';' em lugar de '.' o programa HeidiSQL executou:
UPDATE `vendas` SET `vr_pedra`=-1;
e não conseguiu entender:
42 WHERE `trato_id`=1401 AND `caixa_id`=0;

"UPDATE `vendas` SET `vr_pedra`=-1" sem frase de WHERE foi aplicado para todos os registros da tabela 'venda'.
Os valores de todos os registros da coluna 'vr_pedra' foi modificado em -1.

A única solução foi contar com arquivo de backup, e repetir as transações após a última cópia de segurança.

terça-feira, 25 de março de 2014

Segurança? Praga? Santander

Tenho uma conta do Banco Santander do Brasil.
Hoje quando estava acessando Internet Banking do banco, fui instruído e obrigado instalar o módulo de segurança para Chrome.

Não tenho uma boa experiência deste módulo de segurança do Santander.
Ele travava Firefox.

Ele trocava o conteúdo do arquivo de configuração
C:\Windows\System32\drivers\etc\hosts
toda vez que acessar o site Santander com Internet Explorer.
Acho que a extensão comporta com um modo muito grosso, porque nunca vi um programa que escreve no arquivo hosts assim.
Claro que antivirus alertava toda vez que ocorrer a tentativa de violar o arquivo hosts.
Sem falar que torna inviável o uso do Internet Explorer por lentidão, era uma experiência desagradável ao fechar janela de alerta do antivirus.

Foi uma alegria enquanto o site não pedia a instalação deste pesadelo, mas a alegria acabou, a sombra voltou.
Obvio que não conseguiria fazer transações mais delicadas como transferência, pagamento etc. sem instalar este módulo de segurança.

Utilizando Chrome minha solução é o seguinte:
  1. clicar o ícone três barras horizontais do canto direito superior do Chrome
  2. selecionar Tools - Extensions do menu
  3. desmarcar caixa Enable do "GBBD Banco Santander (Brasil) S.A. - Módulo de Proteção"

Agora quando utilizar Santander Internet Banking só repetir este procedimento e habilitar o módulo, e após o uso desabilitar de novo.

Hoje mais de 30 usuários avaliam esta extensão como uma estrela ou nem merece uma.
Alguém sabe por quê um banco de altura como Santander (ou alguns outros bancos que utilizam este módulo de segurança) obriga seus correntistas utilizarem esta merda?

sexta-feira, 28 de dezembro de 2012

Alterar "Unidentified network" para "Private network" no Windows 7

O usuário de Windows Vista e 7 (não sei 8), consulta "Network and Sharing Center" para verificar configurações da rede.
Pode reparar que alguma rede está classificada como "Undefined network" configurado igual a rede pública.

Pode mudar esta definição na máquina com Windows Vista, clicando "customize", mas é diferente no Windows 7.
Aparentemente não há como mudar esta classificação "Rede não identificada".
Há situação onde quer mudar "Rede não identificada" para "Rede privada" na máquina que roda Windows 7.

O Windows 7 reconhece uma rede sem definição de gateway padrão, como uma rede "não identificada", o mesmo tratamento da rede pública que limita vários recursos por firewall forte para garantir segurança do computador.
Neste caso não permite, por exemplo, procurar nome de computador na rede, isso impede compartillhar recursos como arquivo e impressora.

Tenho computador que possui duas placas de rede, uma que conecta com o modem ADSL, a interface com a internet, e a outra conectada com o outro computador com o cabo cruzado que estabelece uma conexão peer to peer entre dois computadores.
A primeira conexão de rede com o modem possui default gateway, que é endereço do modem (roda servidor DHCP), no meu caso 192.168.1.1 onde o endereço do computador é 192.168.1.2.

A segunda conexão de rede é somente conectado com o outro computador peer to peer atravez de um cabo cruzado, mas o próprio computador com o endereço IP fixo atua como servidor DHCP que dá endereço para o computador conectado.
O próprio computador atua como roteador que divide duas redes, cujo maior tarefa é oferecer a conexão à internet para o computador conectado.
A configuração da segunda conexão não possui default gateway definido.
É porque o windows 7 reconhece esta conexão como "Unidentified network".

Quando esta rede é comprovadamente privada, e deseja menos limitações, há método para alterar definição, porém este é um pouco complicado e não é óbvio.

Encontrei este método na internet.
Aqui coloco neste blog como se faz esta alteração de definição de rede no Windows 7.

Há versão do Windows 7 que não funciona o método.
Este caso precisa mexer o registro (registry) do Windows.
Não explico o método edição do registro aqui.

  1. Apertar botão start, preenche "lo" na caixa "Search programs and files", vai aparecer nome do programa "Local Security Policy"
  2. Abrir "Local Security Policy".
  3. Clicar "Network List Manager Policies" na quadra esquerda.
  4. Clicar duas vezes "Unidentified Networks" na quadra direita.
  5. Mudar da "Not configured" para "Private" o tipo da localidade (Location Type).

Vai ver o ícone e descrição muda de banco (Public network) para rede de computador (Work network).

quinta-feira, 27 de dezembro de 2012

Montar rede de computador mais barata

Aqui tem dois computadores e uma impressora.
Como podemos conectar-se todos para poder usar todos recursos de qualquer computador?
Quais equipamentos são necessários para efetuar a conexão para a internet?

Sim, respostas são diversas.

A impressora mais simples sem recurso próprio de conexão a rede será normalmente conectada com um dos computadores com um cabo USB (vamos esquecer impressora velha que utiliza outro tipo de cabo...) e compartilhar na rede.

Vamos ver um exemplo de rede de minha casa.
Há 5 anos que instalei uma rede com fio em casa para se conectar dois computadores para a internet, porque com fio estava mais econômica na época.
Subi no forro, lancei cabo, passei cabo na tubulação existente de energia (tecnicamente não recomendada mistura de cabos de força e de comunicação).
Hoje faço uma breve revisão.

O computador desktop é montado, a placa mãe possui placa de rede integrada.
O notebook que comprei em 2008 já vem junto com conexão tradicional de fio RJ45 e a moderna sem fio.
Tinha um ADSL modem básico fornecido pela operadora de telefone, que possuía roteador integrado, porém só uma porta LAN, claro, não tem recurso de rede sem fio.
Já perdi dois modems possivelmente queimadas por descarga elétrica na linha telefônica, mas sempre substitui por um dos modelo mais básicos.

Quais equipamentos são necessários para efetuar a conexão inclusive escolha de modem ADSL?

  1. Solução totalmente sem fio - Usar um modem ADSL com roteador sem fio (ADSL wireless router)
    Necessários: um modem ADSL com roteador sem fio (R$100), uma placa de rede sem fio para o desktop (R$50)
    Hoje esta solução pode ser mais viável e limpa porque não tem nenhum fio entre modem e dois computadores, além da vantagem que traz a rede flexibilidade de onde colocam-se dois computadores e o roteador.
    Quando queima o modem roteador ADSL sem fio, o prejuízo é grande por ser o equipamento caro.
    Custo: R$150

  2. Solução mista - Usar um modem ADSL simples e um roteador sem fio
    Necessários: um modem ADSL simples (R$40), um roteador sem fio (R$60), 2 cabos de rede (R$12)
    Alem do modem e o roteador, precisamos dois cabos de rede que conecta desktop-roteador, e o outro, modem-roteador.
    O notebook utiliza interface LAN sem fio.
    O modem configurado em modo bridge junto com o roteador sem fio OU o roteador do modem habilitado junto com o roteador sem fio com função roteador desabilitada (não testado).
    Teoricamente também permitido dois roteadores habilitados, assim teremos WAN (internet até modem)-> LAN1 (modem e roteador) -> LAN2 (roteador e computadores)?
    Custo: R$112

  3. Solução totalmente com fio - Usar um modem ADSL simples e um switch (=comutador - Layer 2 switch)
    Necessários: um modem ADSL simples (R$40), um switch de mínimo 3 portas (R$30), 3 cabos de rede (R$18)
    Alem do switch precisaríamos 3 cabos de rede que conecta desktop-switch, notebook-switch e modem-switch.
    O roteador do modem faz roteamento.
    Custo: R$88

  4. Solução totalmente com fio - Usar um modem ADSL simples e uma placa de rede no desktop
    Necessários: um modem ADSL simples (R$40), uma placa de rede (R$20), um cabo de rede (R$6) que conecta modem-desktop, um cabo de rede cruzado (crossover cable - R$8) que conecta desktop-notebook
    O desktop que possui duas interfaces de rede faz tarefa de roteador compartilhando a conexão à internet.
    Custo: R$74

Os custos são tomados no site buscape.com.br nesta data, apenas para ter noção comparativa.
O comprimento de cabo de rede é de 1,5m.
Quando monta a rede com fio, o custo depende de locais dos equipamentos (cabo R$0,80 a 1,50/metro dependendo muito de quantidade de compra).

Já eu tinha ferramentas como alicate crimpar, cabo, conectores RJ45, ficou ainda mais barata a opção 4, mas para quem não tem ferramenta e materiais, o resultado não deve ser igual.

domingo, 20 de maio de 2012

Modem ADSL Intelbras GKM 1220 e PPPoE

Apenas dois anos e 1 mes de uso o modem ADSL D-Link DSL-500B começou a apresentar problema de conexão instável, que pode ser um problema comum de todos modems ADSL especialmente de baixo custo.
Hoje ninguem tenta consertar este tipo de aparelho que virou "commodity", a única solução é substituição.
Já sabendo que equipamento não durar muito, procurei um modem mais barato e encontrei Intelbras GKM 1220 de R$69 com frete.

O produto é acompanhado de um "CD com assistente de instalação" e uma "Guia de instalação".

O modem está com uma etiqueta adesivo que tampa conexões que diz "Insira o CD antes de conectar os cabos"
Decepcionei com este assistente porque só explica como conectar os cabos, e com relação a instalação nada ajudou.

Este assistente possa funcionar bem se usuário possuir só um computador e instalar uma conexão PPP(oE) nele e utilizar este modem com o modo bridge, como todo mundo fazia na era de conexão dialup com modem discado.

Duvido que hoje muita gente ainda utiliza este tipo de configuração de modo ponte em um equipamento modem roteador integrado.
É lógico que quem monta uma rede residencial sem fio dificilmente adquiriria este modelo, pois não possui função roteador sem fio, tambem não seria muito recomendável para quem possui menos de 4 computadores com conexão com fio porque o modelo possui só uma conexão LAN.

Mas como meu caso, quem usa um modem ADSL e um roteador sem (ou com) fio, ou ainda com um switch, o modem tem que estar do modo PPPoE.
Para tal configuração o CD e a guia não contribuiram nada.
O que ajudou é a etiqueta no fundo do produto:
Configuração Padrão: IP: 192.168.1.1 Usuário: admin Senha: admin


Con esta informação consegui acessar o software do modem.

Uma surpresa foi layout da tela do site do modem, que é quase igual do modem antigo, DSL-500B.
Não tive nenhuma dificuldade em configuração com o software já conhecido e a Guia de Instalação Rápida do DSL-500B.



Conclusão

A Intelbras deve estudar o contúdo do manual.
Não adianta colocar mil demonstrações de flush no site de internet, porque quem está configurando um modem não tem acesso a internet!
A Guia de Instalação Rápida do D-Link DSL-500B não é completo, porém útil.