时间:2021-05-23
如果把用户输入到一个网页,将其插入到MySQL数据库,有机会离开了发生安全问题被称为SQL注入敞开。这一课将教如何帮助防止这种情况的发生,并帮助保护脚本和MySQL语句。
注入通常发生在处理一个用户输入,如他们的名字,而不是一个名字,他们给一个会在不知不觉中你的数据库上运行的MySQL语句。
永远不要信任用户提供的数据,只能验证后处理这些数据,作为一项规则,这是通过模式匹配。在下面的例子中,用户名被限制为字母数字字符加下划线的长度在8到20个字符之间 - 根据需要修改这些规则。
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)){ $result = mysql_query("SELECT * FROM users WHERE username=$matches[0]");} else { echo "username not accepted";}为了说明这个问题,认为这是摘要:
// supposed input$name = "Qadir'; DELETE FROM users;";mysql_query("SELECT * FROM users WHERE name='{$name}'");函数调用应该是从用户表中的名称列的名称相匹配用户指定的检索记录。在正常情况下,名称只包含字母数字字符或空间,如字符串髂骨。但在这里,给$name通过附加一个全新的查询,调用数据库变成灾难:注入DELETE查询删除用户的所有记录。
幸运的是,如果使用MySQL,在mysql_query()函数不会允许查询堆叠,或在一个单一的函数调用执行多个查询。如果尝试到堆放查询则调用失败。
其他PHP数据库扩展,如SQLite和PostgreSQL则愉快地进行堆查询,执行在一个字符串中的所有的查询,并创建一个严重的安全问题。
防止SQL注入:
可以处理所有的转义字符巧妙的脚本语言,比如Perl和PHP。 PHP的MySQL扩展提供的函数mysql_real_escape_string()输入到MySQL的特殊字符进行转义。
if (get_magic_quotes_gpc()) { $name = stripslashes($name);}$name = mysql_real_escape_string($name);mysql_query("SELECT * FROM users WHERE name='{$name}'");LIKE困境:
为了解决的LIKE问题,一个自定义的转义机制必须用户提供的%和_字符转换成文字。使用addcslashes()函数,让可以指定一个字符范围转义。
$sub = addcslashes(mysql_real_escape_string("%something_"), "%_");// $sub == \%something\_mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
第四安全性:是指网站无安全漏洞和非法提交、访问漏洞等问题。一个网站要长期稳定的运行,安全性必不可少。要不然网站动不动就发生“挂马”、“被黑”或“注入”等安全问题
一、线程安全问题产生的原因线程安全问题都是由全局变量及静态变量引起的二、线程安全问题SimpleDateFormatesdf=newSimpleDateForm
正在看的ORACLE教程是:MicrosoftSQLServer安全问题。MicrosoftSQLServer7.0安全问题MicrosoftCorporati
SQL注入产生的安全问题。绝大多数的攻击者在电子商务网站后台所遭受的非法网络攻击都可能是由于对sql的注入,sql注入语句如果本身存在了漏洞,就可能会直接导致网
安全隐患是设计人员要关心的问题,问题有可能出现在糟糕的代码中,客户未更新的软件,恶意注入网站的内容或找到不当的登录方式等,有的企业不太关心安全问题,在网站的