SQL安全基础知识:通过$ _POST

时间:2015-09-23 08:18:01

标签: php security mysqli

我开始进入PHP安全领域,因为我开发了一个具有很高安全风险的在线应用程序(编码时我没有考虑任何安全方面)。

我收到这4个输入,由Ajax发送给PHP,通过这种方式:

include("conexionbbdd.php");

if (isset($_POST['name'], $_POST['email'], $_POST['pwd'])){

    $name = mysqli_real_escape_string($con,$_POST['name']);
    $email = mysqli_real_escape_string($con,$_POST['email']);
    $phone = mysqli_real_escape_string($con,$_POST['phone']);
    $passwords = mysqli_real_escape_string($con,$_POST['pwd']);
    $password = md5($passwords);

    $query_verify_email = "SELECT * FROM ws_users WHERE us_mail ='$email' and us_validmail = 1";
    $verified_email = mysqli_query($con,$query_verify_email);

    if (!$verified_email) {
        echo 'System Error';}

    if (mysqli_num_rows($verified_email) == 0) {
        //START REGISTERING ACTIONS

从用户输入接收和清理字符串时,是否还有其他安全方面的问题?上述示例是否代表避免SQL风险和注入的安全方法?

另一方面,某些收到的字符串将为完整消息,其中包含'"\n或{{1}等字符}。由于内容是一个完整的消息,因此该字符串必须能够具有此字符而不会有SQL注入的风险。正如我所见,\r删除了mysqli_real_escape_string个字符,那么如何从需要保留上述字符的字符串中清理和保护我的应用程序呢?

2 个答案:

答案 0 :(得分:3)

有时Stack Overflow让我的眼睛流血。

我能理解这个问题,这个问题基于缺乏经验和测量误差,但答案与错误的前提一致,然后使事情变得更糟我根本无法忍受。

这个问题已被问过数百次了。有数百个正确的答案,解释所有的妄想和错误的前提。但仍然有人发现错误的问题和糟糕的可怕答案值得投票,为未来的访客推荐它。

社区哪里应该关闭这个问题并低估答案?

答案 1 :(得分:-3)

您可以尝试这种卫生

<?php
$user_ID = get_current_user_ID();
$user = new WP_User( $user_ID );
$current_user = $user->roles[0];

if( $current_user == 'client' ){
   echo 'hello client';
} else {
   // do nothing
}
?>

或使用PDO您可以创建包含数据库连接的类

function string_sanitize($value) {

        $search = array("\\",  "\x00", "\n",  "\r",  "'",  '"', "\x1a");
        $replace = array("\\\\","\\0","\\n", "\\r", "\'", '\"', "\\Z");

        return str_replace($search, $replace, $value);

    }

    function sanitize($value){

        return string_sanitize(htmlentities(trim($value)));

    }
  

您可以关注link