繁体   English   中英

将安全表单插入数据库php

[英]Secure Form insert in database php

我已经读了很多有关如何安全处理从表单中获取的输入并将其插入数据库的内容,但是如果我做得正确的话,这对我来说还不清楚。 我试图避免所有可能的威胁,包括SQL注入,并且我直接将文件(图像)上载到数据库中。 我想知道是否有人可以帮助我看看我的代码。 我正在使用adodb活动记录来连接我的数据库和php。

    function insertar($post){           
        try {
            $solicitud = new solicitud();
            $solicitud->nombre = revisarInputTexto($post['nombre']." ".$post['apellido1']." ".$post['apellido2']);
            $solicitud->residencia = revisarInputTexto($post['residencia']);
            $solicitud->correo = revisarInputEmail($post['correo']);
            $solicitud->genero = revisarInputTexto($post['genero']);
            $solicitud->gradoacademicomaximo = revisarInputTexto($post['gradoacademico']);
            $solicitud->experienciaprofesional = revisarInputTexto($post['experienciaprofesional']);
            $solicitud->experienciadocente = revisarInputTexto($post['experienciadocente']);
            $solicitud->unidadacademica = revisarInputTexto($post['unidad']);

            if(isset($post['labora'])){
                $solicitud->laboradoucr = true;
            }else{
                $solicitud->laboradoucr = false;
            }       

            $solicitud->telefonos = revisarInputInt($post['telefono1'])."/".revisarInputInt($post['telefono2'])."/".revisarInputInt($post['telefono3']);
            $solicitud->nacimiento = revisarInputInt($post['anno']);

            $tmpName  = $_FILES['cedula']['tmp_name'];
            $size = $_FILES['cedula']['size'];

            if(getimagesize($tmpName) && $size < 2048000){
                $fp      = fopen($tmpName, 'r');
                $content = fread($fp, filesize($tmpName));
                $content = addslashes($content);
                fclose($fp);        
                $solicitud->fotoidentificacion = $content;
            }else{
                return false;
            }

            $solicitud->save();
        } catch (ErrorException $e) {               
            return false;
        }   
        return true;
    }

    function obtenerUnidades(){
        $unidades = new unidadacademica();
        $arreglo = $unidades->Find("1=1");
        return $arreglo;
    }

    function revisarInputTexto($datos){
        $datos = trim($datos);
        $datos = filter_var($datos, FILTER_SANITIZE_STRING);
        return $datos;
    }

    function revisarInputEmail($datos){
        $datos = trim($datos);
        $datos = filter_var($datos, FILTER_SANITIZE_EMAIL);
        return $datos;
    }

    function revisarInputInt($datos){
        $datos = trim($datos);
        $datos = filter_var($datos, FILTER_SANITIZE_NUMBER_INT);
        return $datos;
    }


    // Controlador
    if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['accion'])){
            if (insertar($_POST)){
                $smarty->display('visitas-exito.tpl');
            }
            else{
                $smarty->display('visitas-fallo.tpl');
            }   
    }else{
        $unidades = obtenerUnidades();
        $smarty->assign('unidades', $unidades);
        $smarty->display('visitas-formulario.tpl');
    }

我使用的表单非常标准,我根据需要建立了所需的字段,仅此而已。

“控制器”进行一些检查,然后调用方法“ insertar”,在该方法中,我创建了活动记录对象,以在处理后输入之后将其插入数据库中。

如果用于执行实际数据库查询的方法阻止了SQL注入,那么您无需清理输入。 里面没有害处,但这是多余的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM